Skip to content

Commit c4e1996

Browse files
authored
Fix Linux_android_emu tests late initialization errors (#152932)
This does not fix the issue underlying flutter/flutter#152684, but may prevent `adb logcat` from ending before we've captured the logs that explain why the app or emulator are potentially crashing. Fixes Fixes flutter/flutter#152899
1 parent 521b0b3 commit c4e1996

File tree

5 files changed

+39
-37
lines changed

5 files changed

+39
-37
lines changed

dev/integration_tests/android_driver_test/test_driver/main_test.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ Future<void> _main() async {
2424
// To generate golden files locally, uncomment the following line.
2525
// autoUpdateGoldenFiles = true;
2626

27-
late FlutterDriver flutterDriver;
28-
late NativeDriver nativeDriver;
27+
FlutterDriver? flutterDriver;
28+
NativeDriver? nativeDriver;
2929

3030
setUpAll(() async {
3131
flutterDriver = await FlutterDriver.connect(
@@ -38,14 +38,14 @@ Future<void> _main() async {
3838
});
3939

4040
tearDownAll(() async {
41-
await nativeDriver.close();
42-
await flutterDriver.close();
41+
await nativeDriver?.close();
42+
await flutterDriver?.close();
4343
});
4444

4545
test('should screenshot and match a full-screen blue rectangle', () async {
46-
await flutterDriver.waitFor(find.byType('DecoratedBox'));
46+
await flutterDriver?.waitFor(find.byType('DecoratedBox'));
4747
await expectLater(
48-
nativeDriver.screenshot(),
48+
nativeDriver?.screenshot(),
4949
matchesGoldenFile('android_driver_test.BlueRectangle.png'),
5050
);
5151
}, timeout: Timeout.none);

dev/integration_tests/android_views/test_driver/main_test.dart

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,62 +6,62 @@ import 'package:flutter_driver/flutter_driver.dart';
66
import 'package:test/test.dart' hide TypeMatcher, isInstanceOf;
77

88
Future<void> main() async {
9-
late FlutterDriver driver;
9+
FlutterDriver? driver;
1010

1111
setUpAll(() async {
1212
driver = await FlutterDriver.connect();
1313
});
1414

1515
tearDownAll(() {
16-
driver.close();
16+
driver?.close();
1717
});
1818

1919
// Each test below must return back to the home page after finishing.
2020

2121
test('MotionEvent recomposition', () async {
2222
final SerializableFinder motionEventsListTile =
2323
find.byValueKey('MotionEventsListTile');
24-
await driver.tap(motionEventsListTile);
25-
await driver.runUnsynchronized(() async {
26-
driver.waitFor(find.byValueKey('PlatformView'));
24+
await driver?.tap(motionEventsListTile);
25+
await driver?.runUnsynchronized(() async {
26+
driver?.waitFor(find.byValueKey('PlatformView'));
2727
});
28-
final String errorMessage = await driver.requestData('run test');
28+
final String errorMessage = (await driver?.requestData('run test'))!;
2929
expect(errorMessage, '');
3030
final SerializableFinder backButton = find.byValueKey('back');
31-
await driver.tap(backButton);
31+
await driver?.tap(backButton);
3232
}, timeout: Timeout.none);
3333

3434
group('WindowManager', ()
3535
{
3636
setUpAll(() async {
3737
final SerializableFinder wmListTile =
3838
find.byValueKey('WmIntegrationsListTile');
39-
await driver.tap(wmListTile);
39+
await driver?.tap(wmListTile);
4040
});
4141

4242
tearDownAll(() async {
43-
await driver.waitFor(find.pageBack());
44-
await driver.tap(find.pageBack());
43+
await driver?.waitFor(find.pageBack());
44+
await driver?.tap(find.pageBack());
4545
});
4646

4747
test('AlertDialog from platform view context', () async {
4848
final SerializableFinder showAlertDialog = find.byValueKey(
4949
'ShowAlertDialog');
50-
await driver.waitFor(showAlertDialog);
51-
await driver.tap(showAlertDialog);
52-
final String status = await driver.getText(find.byValueKey('Status'));
50+
await driver?.waitFor(showAlertDialog);
51+
await driver?.tap(showAlertDialog);
52+
final String status = (await driver?.getText(find.byValueKey('Status')))!;
5353
expect(status, 'Success');
5454
}, timeout: Timeout.none);
5555

5656
test('Child windows can handle touches', () async {
5757
final SerializableFinder addWindow = find.byValueKey('AddWindow');
58-
await driver.waitFor(addWindow);
59-
await driver.tap(addWindow);
58+
await driver?.waitFor(addWindow);
59+
await driver?.tap(addWindow);
6060
final SerializableFinder tapWindow = find.byValueKey('TapWindow');
61-
await driver.tap(tapWindow);
62-
final String windowClickCount = await driver.getText(
61+
await driver?.tap(tapWindow);
62+
final String windowClickCount = (await driver?.getText(
6363
find.byValueKey('WindowClickCount'),
64-
);
64+
))!;
6565
expect(windowClickCount, 'Click count: 1');
6666
}, timeout: Timeout.none, skip: true); // TODO(garyq): Skipped, see https://github.com/flutter/flutter/issues/88479
6767
});

dev/integration_tests/external_textures/test_driver/frame_rate_main_test.dart

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@ final RegExp _statsRegExp = RegExp('Produced: (.*)fps\nConsumed: (.*)fps\nWidget
1212
const Duration _samplingTime = Duration(seconds: 8);
1313

1414
Future<void> main() async {
15-
late final FlutterDriver driver;
15+
FlutterDriver? driver;
1616

1717
setUpAll(() async {
1818
driver = await FlutterDriver.connect();
1919
});
2020

2121
tearDownAll(() async {
22-
await driver.close();
22+
await driver?.close();
2323
});
2424

2525
// Verifies we consume texture frames at a rate close to the minimum of the
@@ -31,19 +31,19 @@ Future<void> main() async {
3131
final SerializableFinder summary = find.byValueKey('summary');
3232

3333
// Wait for calibration to complete and fab to appear.
34-
await driver.waitFor(fab);
34+
await driver?.waitFor(fab);
3535

36-
final String calibrationResult = await driver.getText(summary);
36+
final String calibrationResult = (await driver?.getText(summary))!;
3737
final Match? matchCalibration = _calibrationRegExp.matchAsPrefix(calibrationResult);
3838
expect(matchCalibration, isNotNull);
3939
final double flutterFrameRate = double.parse(matchCalibration?.group(1) ?? '0');
4040

4141
// Texture frame stats at 0.5x Flutter frame rate
42-
await driver.tap(fab);
42+
await driver?.tap(fab);
4343
await Future<void>.delayed(_samplingTime);
44-
await driver.tap(fab);
44+
await driver?.tap(fab);
4545

46-
final String statsSlow = await driver.getText(summary);
46+
final String statsSlow = (await driver?.getText(summary))!;
4747
final Match matchSlow = _statsRegExp.matchAsPrefix(statsSlow)!;
4848
expect(matchSlow, isNotNull);
4949

@@ -55,11 +55,11 @@ Future<void> main() async {
5555
expect(widgetBuilds, 1);
5656

5757
// Texture frame stats at 2.0x Flutter frame rate
58-
await driver.tap(fab);
58+
await driver?.tap(fab);
5959
await Future<void>.delayed(_samplingTime);
60-
await driver.tap(fab);
60+
await driver?.tap(fab);
6161

62-
final String statsFast = await driver.getText(summary);
62+
final String statsFast = (await driver?.getText(summary))!;
6363
final Match matchFast = _statsRegExp.matchAsPrefix(statsFast)!;
6464
expect(matchFast, isNotNull);
6565

dev/integration_tests/ui/test_driver/defines_test.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,17 @@ import 'package:flutter_driver/flutter_driver.dart';
66
import 'package:test/test.dart' hide TypeMatcher, isInstanceOf;
77

88
void main() {
9-
late FlutterDriver driver;
9+
FlutterDriver? driver;
1010

1111
setUpAll(() async {
1212
driver = await FlutterDriver.connect();
1313
});
1414

1515
tearDownAll(() async {
16-
await driver.close();
16+
await driver?.close();
1717
});
1818

1919
test('Can run with --dart-define', () async {
20-
await driver.waitFor(find.text('Example,AValue'));
20+
await driver?.waitFor(find.text('Example,AValue'));
2121
}, timeout: Timeout.none);
2222
}

packages/flutter_driver/lib/src/driver/vmservice_driver.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,10 @@ class VMServiceFlutterDriver extends FlutterDriver {
109109
while (true) {
110110
final vms.Isolate isolate = await client.getIsolate(ref.id!);
111111
if (isolate.pauseEvent!.kind == vms.EventKind.kNone) {
112+
_log('Waiting for isolate ${ref.number} to be runnable.');
112113
await Future<void>.delayed(_kPauseBetweenIsolateRefresh);
113114
} else {
115+
_log('Isolate ${ref.number} is runnable.');
114116
return isolate;
115117
}
116118
}

0 commit comments

Comments
 (0)