mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
Originally reverted due to a misattributed hot reload benchmark
regression.
This reverts commit f5bce716e1
.
This commit is contained in:
parent
38805a4392
commit
d83c510de9
@ -21,6 +21,7 @@ import '../convert.dart';
|
|||||||
import '../device.dart';
|
import '../device.dart';
|
||||||
import '../globals.dart' as globals;
|
import '../globals.dart' as globals;
|
||||||
import '../project.dart';
|
import '../project.dart';
|
||||||
|
import '../resident_runner.dart';
|
||||||
import '../vmservice.dart';
|
import '../vmservice.dart';
|
||||||
|
|
||||||
import 'font_config_manager.dart';
|
import 'font_config_manager.dart';
|
||||||
@ -72,6 +73,7 @@ class FlutterTesterTestDevice extends TestDevice {
|
|||||||
|
|
||||||
Process? _process;
|
Process? _process;
|
||||||
HttpServer? _server;
|
HttpServer? _server;
|
||||||
|
DevtoolsLauncher? _devToolsLauncher;
|
||||||
|
|
||||||
/// Starts the device.
|
/// Starts the device.
|
||||||
///
|
///
|
||||||
@ -163,9 +165,11 @@ class FlutterTesterTestDevice extends TestDevice {
|
|||||||
debuggingOptions.hostVmServicePort == detectedUri.port);
|
debuggingOptions.hostVmServicePort == detectedUri.port);
|
||||||
|
|
||||||
Uri? forwardingUri;
|
Uri? forwardingUri;
|
||||||
|
DartDevelopmentService? dds;
|
||||||
|
|
||||||
if (debuggingOptions.enableDds) {
|
if (debuggingOptions.enableDds) {
|
||||||
logger.printTrace('test $id: Starting Dart Development Service');
|
logger.printTrace('test $id: Starting Dart Development Service');
|
||||||
final DartDevelopmentService dds = await startDds(
|
dds = await startDds(
|
||||||
detectedUri,
|
detectedUri,
|
||||||
uriConverter: uriConverter,
|
uriConverter: uriConverter,
|
||||||
);
|
);
|
||||||
@ -193,10 +197,10 @@ class FlutterTesterTestDevice extends TestDevice {
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
if (debuggingOptions.startPaused && !machine!) {
|
if (debuggingOptions.startPaused && !machine!) {
|
||||||
logger.printStatus('The test process has been started.');
|
logger.printStatus('The Dart VM service is listening on $forwardingUri');
|
||||||
logger.printStatus('You can now connect to it using vmService. To connect, load the following Web site in your browser:');
|
await _startDevTools(forwardingUri, dds);
|
||||||
logger.printStatus(' $forwardingUri');
|
logger.printStatus('');
|
||||||
logger.printStatus('You should first set appropriate breakpoints, then resume the test in the debugger.');
|
logger.printStatus('The test process has been started. Set any relevant breakpoints and then resume the test in the debugger.');
|
||||||
}
|
}
|
||||||
_gotProcessVmServiceUri.complete(forwardingUri);
|
_gotProcessVmServiceUri.complete(forwardingUri);
|
||||||
},
|
},
|
||||||
@ -215,6 +219,9 @@ class FlutterTesterTestDevice extends TestDevice {
|
|||||||
logger.printTrace('test $id: Terminating flutter_tester process');
|
logger.printTrace('test $id: Terminating flutter_tester process');
|
||||||
_process?.kill(io.ProcessSignal.sigkill);
|
_process?.kill(io.ProcessSignal.sigkill);
|
||||||
|
|
||||||
|
logger.printTrace('test $id: Shutting down DevTools server');
|
||||||
|
await _devToolsLauncher?.close();
|
||||||
|
|
||||||
logger.printTrace('test $id: Shutting down test harness socket server');
|
logger.printTrace('test $id: Shutting down test harness socket server');
|
||||||
await _server?.close(force: true);
|
await _server?.close(force: true);
|
||||||
await finished;
|
await finished;
|
||||||
@ -261,6 +268,29 @@ class FlutterTesterTestDevice extends TestDevice {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> _startDevTools(Uri forwardingUri, DartDevelopmentService? dds) async {
|
||||||
|
_devToolsLauncher = DevtoolsLauncher.instance;
|
||||||
|
logger.printTrace('test $id: Serving DevTools...');
|
||||||
|
final DevToolsServerAddress? devToolsServerAddress = await _devToolsLauncher?.serve();
|
||||||
|
|
||||||
|
if (devToolsServerAddress == null) {
|
||||||
|
logger.printTrace('test $id: Failed to start DevTools');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
await _devToolsLauncher?.ready;
|
||||||
|
logger.printTrace('test $id: DevTools is being served at ${devToolsServerAddress.uri}');
|
||||||
|
|
||||||
|
// Notify the DDS instance that there's a DevTools instance available so it can correctly
|
||||||
|
// redirect DevTools related requests.
|
||||||
|
dds?.setExternalDevToolsUri(devToolsServerAddress.uri!);
|
||||||
|
|
||||||
|
final Uri devToolsUri = devToolsServerAddress.uri!.replace(
|
||||||
|
// Use query instead of queryParameters to avoid unnecessary encoding.
|
||||||
|
query: 'uri=$forwardingUri',
|
||||||
|
);
|
||||||
|
logger.printStatus('The Flutter DevTools debugger and profiler is available at: $devToolsUri');
|
||||||
|
}
|
||||||
|
|
||||||
/// Binds an [HttpServer] serving from `host` on `port`.
|
/// Binds an [HttpServer] serving from `host` on `port`.
|
||||||
///
|
///
|
||||||
/// Only intended to be overridden in tests.
|
/// Only intended to be overridden in tests.
|
||||||
|
@ -222,7 +222,7 @@ void main() {
|
|||||||
final Completer<Uri> completer = Completer<Uri>();
|
final Completer<Uri> completer = Completer<Uri>();
|
||||||
final RegExp vmServiceUriRegExp = RegExp(r'((http)?:\/\/)[^\s]+');
|
final RegExp vmServiceUriRegExp = RegExp(r'((http)?:\/\/)[^\s]+');
|
||||||
sub = process.stdout.transform(utf8.decoder).listen((String e) {
|
sub = process.stdout.transform(utf8.decoder).listen((String e) {
|
||||||
if (vmServiceUriRegExp.hasMatch(e)) {
|
if (!completer.isCompleted && vmServiceUriRegExp.hasMatch(e)) {
|
||||||
completer.complete(Uri.parse(vmServiceUriRegExp.firstMatch(e)!.group(0)!));
|
completer.complete(Uri.parse(vmServiceUriRegExp.firstMatch(e)!.group(0)!));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -237,6 +237,31 @@ void main() {
|
|||||||
process.kill();
|
process.kill();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
testWithoutContext('flutter test should serve DevTools', () async {
|
||||||
|
late final Process process;
|
||||||
|
late final StreamSubscription<String> sub;
|
||||||
|
try {
|
||||||
|
process = await _runFlutterTestConcurrent('trivial', automatedTestsDirectory, flutterTestDirectory,
|
||||||
|
extraArguments: const <String>['--start-paused']);
|
||||||
|
final Completer<Uri> completer = Completer<Uri>();
|
||||||
|
final RegExp devToolsUriRegExp = RegExp(r'The Flutter DevTools debugger and profiler is available at: (http://[^\s]+)');
|
||||||
|
sub = process.stdout.transform(utf8.decoder).listen((String e) {
|
||||||
|
if (!completer.isCompleted && devToolsUriRegExp.hasMatch(e)) {
|
||||||
|
completer.complete(Uri.parse(devToolsUriRegExp.firstMatch(e)!.group(1)!));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
final Uri devToolsUri = await completer.future;
|
||||||
|
final HttpClient client = HttpClient();
|
||||||
|
final HttpClientRequest request = await client.getUrl(devToolsUri);
|
||||||
|
final HttpClientResponse response = await request.close();
|
||||||
|
final String content = await response.transform(utf8.decoder).join();
|
||||||
|
expect(content.contains('DevTools'), true);
|
||||||
|
} finally {
|
||||||
|
await sub.cancel();
|
||||||
|
process.kill();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _testFile(
|
Future<void> _testFile(
|
||||||
|
Loading…
Reference in New Issue
Block a user