blob: 970912efbe0e3c5a9539a135fe43dc25a315149b [file] [log] [blame]
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:async';
import 'package:file/file.dart';
import 'package:flutter_tools/src/base/io.dart';
import 'package:vm_service/vm_service.dart';
import 'package:vm_service/vm_service_io.dart';
import '../src/common.dart';
import 'test_data/project_with_early_error.dart';
import 'test_driver.dart';
import 'test_utils.dart';
void main() {
late Directory tempDir;
final ProjectWithEarlyError project = ProjectWithEarlyError();
const String exceptionStart = '══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞══════════════════';
late FlutterRunTestDriver flutter;
setUp(() async {
tempDir = createResolvedTempDirectorySync('run_test.');
await project.setUpIn(tempDir);
flutter = FlutterRunTestDriver(tempDir);
});
tearDown(() async {
tryToDelete(tempDir);
});
testWithoutContext('flutter run in non-machine mode reports an early error in an application', () async {
final String flutterBin = fileSystem.path.join(
getFlutterRoot(),
'bin',
'flutter',
);
final StringBuffer stdout = StringBuffer();
final Process process = await processManager.start(<String>[
flutterBin,
'run',
'--disable-service-auth-codes',
'--show-test-device',
'-dflutter-tester',
'--start-paused',
'--dart-define=flutter.inspector.structuredErrors=true',
], workingDirectory: tempDir.path);
transformToLines(process.stdout).listen((String line) async {
stdout.writeln(line);
if (line.startsWith('An Observatory debugger')) {
final RegExp exp = RegExp(r'http://127.0.0.1:(\d+)/');
final RegExpMatch match = exp.firstMatch(line)!;
final String port = match.group(1)!;
if (port != null) {
final VmService vmService =
await vmServiceConnectUri('ws://localhost:$port/ws');
final VM vm = await vmService.getVM();
for (final IsolateRef isolate in vm.isolates!) {
await vmService.resume(isolate.id!);
}
}
}
if (line.startsWith('Another exception was thrown')) {
process.kill();
}
});
await process.exitCode;
expect(stdout.toString(), contains(exceptionStart));
});
testWithoutContext('flutter run in machine mode does not print an error', () async {
final StringBuffer stdout = StringBuffer();
await flutter.run(
startPaused: true,
withDebugger: true,
structuredErrors: true,
);
await flutter.resume();
final Completer<void> completer = Completer<void>();
await Future<void>(() async {
flutter.stdout.listen((String line) {
stdout.writeln(line);
});
await completer.future;
}).timeout(const Duration(seconds: 5), onTimeout: () {
// We don't expect to see any output but want to write to stdout anyway.
completer.complete();
});
await flutter.stop();
expect(stdout.toString(), isNot(contains(exceptionStart)));
});
}