Commit 8f708bfb authored by Adam Barth's avatar Adam Barth Committed by GitHub

Test AboutDrawerItem (#7453)

Also, fix a few minor bugs found by the test.
parent a8cd2125
......@@ -286,4 +286,4 @@ class LicenseRegistry {
for (LicenseEntryCollector collector in _collectors)
yield* collector();
}
}
\ No newline at end of file
}
......@@ -379,6 +379,8 @@ class _LicensePageState extends State<LicensePage> {
Future<Null> _initLicenses() async {
await for (LicenseEntry license in LicenseRegistry.licenses) {
if (!mounted)
return;
setState(() {
_licenses.add(new Padding(
padding: const EdgeInsets.symmetric(vertical: 18.0),
......
......@@ -133,10 +133,7 @@ class DrawerControllerState extends State<DrawerController> with SingleTickerPro
@override
void dispose() {
_historyEntry?.remove();
_controller
..removeListener(_animationChanged)
..removeStatusListener(_animationStatusChanged)
..stop();
_controller.dispose();
super.dispose();
}
......
// Copyright 2016 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/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
testWidgets('AboutDrawerItem control test', (WidgetTester tester) async {
await tester.pumpWidget(
new MaterialApp(
title: 'Pirate app',
home: new Scaffold(
appBar: new AppBar(
title: new Text('Home'),
),
drawer: new Drawer(
child: new Block(
children: <Widget>[
new AboutDrawerItem(
applicationVersion: '0.1.2',
applicationIcon: new FlutterLogo(),
applicationLegalese: 'I am the very model of a modern major general.',
aboutBoxChildren: <Widget>[
new Text('About box'),
]
),
],
),
),
),
),
);
expect(find.text('About Pirate app'), findsNothing);
expect(find.text('0.1.2'), findsNothing);
expect(find.text('About box'), findsNothing);
await tester.tap(find.byType(IconButton));
await tester.pumpUntilNoTransientCallbacks(const Duration(milliseconds: 100));
expect(find.text('About Pirate app'), findsOneWidget);
expect(find.text('0.1.2'), findsNothing);
expect(find.text('About box'), findsNothing);
await tester.tap(find.text('About Pirate app'));
await tester.pumpUntilNoTransientCallbacks(const Duration(milliseconds: 100));
expect(find.text('About Pirate app'), findsOneWidget);
expect(find.text('0.1.2'), findsOneWidget);
expect(find.text('About box'), findsOneWidget);
LicenseRegistry.addLicense(() {
return new Stream<LicenseEntry>.fromIterable(<LicenseEntry>[
new LicenseEntryWithLineBreaks(<String>[ 'Pirate package '], 'Pirate license')
]);
});
await tester.tap(find.text('VIEW LICENSES'));
await tester.pumpUntilNoTransientCallbacks(const Duration(milliseconds: 100));
expect(find.text('Pirate license'), findsOneWidget);
});
testWidgets('AboutDrawerItem control test', (WidgetTester tester) async {
List<String> log = <String>[];
Future<Null> licenseFuture;
LicenseRegistry.addLicense(() {
log.add('license1');
licenseFuture = tester.pumpWidget(new Container());
return new Stream<LicenseEntry>.fromIterable(<LicenseEntry>[]);
});
LicenseRegistry.addLicense(() {
log.add('license2');
return new Stream<LicenseEntry>.fromIterable(<LicenseEntry>[
new LicenseEntryWithLineBreaks(<String>[ 'Another package '], 'Another license')
]);
});
await tester.pumpWidget(new Center(
child: new LicensePage()
));
expect(licenseFuture, isNotNull);
await licenseFuture;
// We should not hit an exception here.
await tester.idle();
expect(log, equals(<String>['license1', 'license2']));
});
}
......@@ -11,7 +11,6 @@ import 'package:flutter/gestures.dart';
import 'package:flutter/http.dart' as http;
import 'package:flutter/rendering.dart';
import 'package:flutter/scheduler.dart';
import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
import 'package:meta/meta.dart';
import 'package:quiver/testing/async.dart';
......@@ -84,8 +83,8 @@ const Size _kDefaultTestViewportSize = const Size(800.0, 600.0);
abstract class TestWidgetsFlutterBinding extends BindingBase
with SchedulerBinding,
GestureBinding,
ServicesBinding,
RendererBinding,
// Services binding omitted to avoid dragging in the licenses code.
WidgetsBinding {
/// Creates and initializes the binding. This function is
/// idempotent; calling it a second time will just return the
......
......@@ -8,7 +8,6 @@ import 'package:flutter/gestures.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/scheduler.dart';
import 'package:flutter/widgets.dart';
import 'package:meta/meta.dart';
import 'package:test/test.dart' as test_package;
import 'all_elements.dart';
......@@ -213,10 +212,10 @@ class WidgetTester extends WidgetController implements HitTestDispatcher, Ticker
///
/// Alternatively, one can check that the return value from this function
/// matches the expected number of pumps.
Future<int> pumpUntilNoTransientCallbacks([
@required Duration duration,
EnginePhase phase = EnginePhase.sendSemanticsTree
]) {
Future<int> pumpUntilNoTransientCallbacks(
Duration duration, [
EnginePhase phase = EnginePhase.sendSemanticsTree
]) {
assert(duration != null);
assert(duration > Duration.ZERO);
int count = 0;
......
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