blob: f2f126509bd17d72840d1ea9442b7c00b264b06d [file] [log] [blame]
// 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 'package:flutter_test/flutter_test.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter/material.dart';
void main() {
testWidgets('TwoLevelList basics', (WidgetTester tester) async {
final Key topKey = new UniqueKey();
final Key sublistKey = new UniqueKey();
final Key bottomKey = new UniqueKey();
final Map<String, WidgetBuilder> routes = <String, WidgetBuilder>{
'/': (_) {
return new Material(
child: new SingleChildScrollView(
child: new Column(
children: <Widget>[
new ListTile(title: const Text('Top'), key: topKey),
new ExpansionTile(
key: sublistKey,
title: const Text('Sublist'),
children: const <Widget>[
const ListTile(title: const Text('0')),
const ListTile(title: const Text('1'))
]
),
new ListTile(title: const Text('Bottom'), key: bottomKey)
]
)
)
);
}
};
await tester.pumpWidget(new MaterialApp(routes: routes));
expect(find.text('Top'), findsOneWidget);
expect(find.text('Sublist'), findsOneWidget);
expect(find.text('Bottom'), findsOneWidget);
double getY(Key key) => tester.getTopLeft(find.byKey(key)).dy;
double getHeight(Key key) => tester.getSize(find.byKey(key)).height;
expect(getY(topKey), lessThan(getY(sublistKey)));
expect(getY(sublistKey), lessThan(getY(bottomKey)));
// The sublist has a one pixel border above and below.
expect(getHeight(topKey), equals(getHeight(sublistKey) - 2.0));
expect(getHeight(bottomKey), equals(getHeight(sublistKey) - 2.0));
await tester.tap(find.text('Sublist'));
await tester.pump(const Duration(seconds: 1));
await tester.pump(const Duration(seconds: 1));
expect(find.text('Top'), findsOneWidget);
expect(find.text('Sublist'), findsOneWidget);
expect(find.text('0'), findsOneWidget);
expect(find.text('1'), findsOneWidget);
expect(find.text('Bottom'), findsOneWidget);
expect(getY(topKey), lessThan(getY(sublistKey)));
expect(getY(sublistKey), lessThan(getY(bottomKey)));
expect(getY(bottomKey) - getY(sublistKey), greaterThan(getHeight(topKey)));
expect(getY(bottomKey) - getY(sublistKey), greaterThan(getHeight(bottomKey)));
});
testWidgets('onExpansionChanged callback', (WidgetTester tester) async {
bool didChangeOpen;
final Map<String, WidgetBuilder> routes = <String, WidgetBuilder>{
'/': (_) {
return new Material(
child: new SingleChildScrollView(
child: new Column(
children: <Widget>[
new ExpansionTile(
title: const Text('Sublist'),
onExpansionChanged: (bool opened) {
didChangeOpen = opened;
},
children: const <Widget>[
const ListTile(title: const Text('0')),
const ListTile(title: const Text('1'))
]
),
]
)
)
);
}
};
await tester.pumpWidget(new MaterialApp(routes: routes));
expect(didChangeOpen, isNull);
await tester.tap(find.text('Sublist'));
expect(didChangeOpen, isTrue);
await tester.pump();
await tester.pump(const Duration(seconds: 1));
await tester.tap(find.text('Sublist'));
expect(didChangeOpen, isFalse);
});
testWidgets('trailing override', (WidgetTester tester) async {
final Map<String, WidgetBuilder> routes = <String, WidgetBuilder>{
'/': (_) {
return new Material(
child: new SingleChildScrollView(
child: new Column(
children: const <Widget>[
const ListTile(title: const Text('Top')),
const ExpansionTile(
title: const Text('Sublist'),
children: const <Widget>[
const ListTile(title: const Text('0')),
const ListTile(title: const Text('1'))
],
trailing: const Icon(Icons.inbox),
),
const ListTile(title: const Text('Bottom'))
]
)
)
);
}
};
await tester.pumpWidget(new MaterialApp(routes: routes));
expect(find.byIcon(Icons.inbox), findsOneWidget);
expect(find.byIcon(Icons.expand_more), findsNothing);
});
}