blob: 9de08c2b57582c39ea884b873082b2cb08921815 [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/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
testWidgets('ExpandIcon test', (WidgetTester tester) async {
bool expanded = false;
await tester.pumpWidget(
wrap(
child: new ExpandIcon(
onPressed: (bool isExpanded) {
expanded = !expanded;
}
)
)
);
expect(expanded, isFalse);
await tester.tap(find.byType(ExpandIcon));
expect(expanded, isTrue);
await tester.pump(const Duration(milliseconds: 100));
await tester.tap(find.byType(ExpandIcon));
expect(expanded, isFalse);
});
testWidgets('ExpandIcon disabled', (WidgetTester tester) async {
await tester.pumpWidget(
wrap(
child: const ExpandIcon(
onPressed: null
)
)
);
final IconTheme iconTheme = tester.firstWidget(find.byType(IconTheme).last);
expect(iconTheme.data.color, equals(Colors.black26));
});
testWidgets('ExpandIcon test isExpanded does not trigger callback', (WidgetTester tester) async {
bool expanded = false;
await tester.pumpWidget(
wrap(
child: new ExpandIcon(
isExpanded: false,
onPressed: (bool isExpanded) {
expanded = !expanded;
}
)
)
);
await tester.pumpWidget(
wrap(
child: new ExpandIcon(
isExpanded: true,
onPressed: (bool isExpanded) {
expanded = !expanded;
}
)
)
);
expect(expanded, isFalse);
});
testWidgets('ExpandIcon is rotated initially if isExpanded is true on first build', (WidgetTester tester) async {
bool expanded = true;
await tester.pumpWidget(
wrap(
child: new ExpandIcon(
isExpanded: expanded,
onPressed: (bool isExpanded) {
expanded = !isExpanded;
},
)
)
);
final RotationTransition rotation = tester.firstWidget(find.byType(RotationTransition));
expect(rotation.turns.value, 0.5);
});
testWidgets('ExpandIcon has correct semantic hints', (WidgetTester tester) async {
final SemanticsHandle handle = tester.ensureSemantics();
const DefaultMaterialLocalizations localizations = DefaultMaterialLocalizations();
await tester.pumpWidget(wrap(
child: new ExpandIcon(
isExpanded: true,
onPressed: (bool _) {},
)
));
expect(tester.getSemanticsData(find.byType(ExpandIcon)), matchesSemanticsData(
hasTapAction: true,
hasEnabledState: true,
isEnabled: true,
isButton: true,
onTapHint: localizations.expandedIconTapHint,
));
await tester.pumpWidget(wrap(
child: new ExpandIcon(
isExpanded: false,
onPressed: (bool _) {},
)
));
expect(tester.getSemanticsData(find.byType(ExpandIcon)), matchesSemanticsData(
hasTapAction: true,
hasEnabledState: true,
isEnabled: true,
isButton: true,
onTapHint: localizations.collapsedIconTapHint,
));
handle.dispose();
});
}
Widget wrap({ Widget child }) {
return new MaterialApp(
home: new Center(
child: new Material(child: child),
),
);
}