Commit 31d2ee9c authored by Yegor Jbanov's avatar Yegor Jbanov Committed by Yegor

tests for waitFor/waitForAbsent

parent 11d7c79b
......@@ -22,6 +22,7 @@ Future<TaskResult> runEndToEndTests() async {
await prepareProvisioningCertificates(testDirectory.path);
await flutter('drive', options: <String>['--verbose', '-d', deviceId, 'lib/keyboard_resize.dart']);
await flutter('drive', options: <String>['--verbose', '-d', deviceId, 'lib/driver.dart']);
});
return new TaskResult.success(<String, dynamic>{});
......
// Copyright 2017 The Chromium 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 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_driver/driver_extension.dart';
void main() {
enableFlutterDriverExtension();
runApp(new DriverTestApp());
}
class DriverTestApp extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return new DriverTestAppState();
}
}
class DriverTestAppState extends State<DriverTestApp> {
bool present = true;
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: new Scaffold(
appBar: new AppBar(
title: const Text('FlutterDriver test'),
),
body: new ListView(
padding: const EdgeInsets.all(5.0),
children: <Widget>[
new Row(
children: <Widget>[
new Expanded(
child: new Text(present ? 'present' : 'absent'),
),
new RaisedButton(
child: const Text(
'toggle',
key: const ValueKey<String>('togglePresent'),
),
onPressed: () {
setState(() {
present = !present;
});
},
),
],
),
],
),
),
);
}
}
// Copyright 2017 The Chromium 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:flutter_driver/flutter_driver.dart';
import 'package:test/test.dart';
void main() {
group('FlutterDriver', () {
final SerializableFinder presentText = find.text('present');
FlutterDriver driver;
setUpAll(() async {
driver = await FlutterDriver.connect();
});
tearDownAll(() async {
await driver.close();
});
test('waitFor should find text "present"', () async {
await driver.waitFor(presentText);
});
test('waitForAbsent should time out waiting for text "present" to disappear', () async {
try {
await driver.waitForAbsent(presentText, timeout: const Duration(seconds: 1));
fail('expected DriverError');
} on DriverError catch(error) {
expect(error.message, contains('Timeout while executing waitForAbsent'));
}
});
test('waitForAbsent should resolve when text "present" disappears', () async {
// Begin waiting for it to disappear
final Completer<Null> whenWaitForAbsentResolves = new Completer<Null>();
driver.waitForAbsent(presentText).then(
whenWaitForAbsentResolves.complete,
onError: whenWaitForAbsentResolves.completeError,
);
// Wait 1 second then make it disappear
await new Future<Null>.delayed(const Duration(seconds: 1));
await driver.tap(find.byValueKey('togglePresent'));
// Ensure waitForAbsent resolves
await whenWaitForAbsentResolves.future;
});
test('waitFor times out waiting for "present" to reappear', () async {
try {
await driver.waitFor(presentText, timeout: const Duration(seconds: 1));
fail('expected DriverError');
} on DriverError catch(error) {
expect(error.message, contains('Timeout while executing waitFor'));
}
});
test('waitFor should resolve when text "present" reappears', () async {
// Begin waiting for it to reappear
final Completer<Null> whenWaitForResolves = new Completer<Null>();
driver.waitFor(presentText).then(
whenWaitForResolves.complete,
onError: whenWaitForResolves.completeError,
);
// Wait 1 second then make it appear
await new Future<Null>.delayed(const Duration(seconds: 1));
await driver.tap(find.byValueKey('togglePresent'));
// Ensure waitFor resolves
await whenWaitForResolves.future;
});
test('waitForAbsent resolves immediately when the element does not exist', () async {
await driver.waitForAbsent(find.text('that does not exist'));
});
});
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment