mirror of
https://github.com/flutter/flutter
synced 2024-10-13 19:52:53 +00:00
c12d120bbf
For example, so that the gallery can override the media query globally.
101 lines
3.9 KiB
Dart
101 lines
3.9 KiB
Dart
// 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/scheduler.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:flutter_gallery/gallery/app.dart';
|
|
|
|
void main() {
|
|
final TestWidgetsFlutterBinding binding = TestWidgetsFlutterBinding.ensureInitialized();
|
|
if (binding is LiveTestWidgetsFlutterBinding)
|
|
binding.framePolicy = LiveTestWidgetsFlutterBindingFramePolicy.fullyLive;
|
|
|
|
testWidgets('Flutter Gallery drawer item test', (WidgetTester tester) async {
|
|
bool hasFeedback = false;
|
|
void mockOnSendFeedback() {
|
|
hasFeedback = true;
|
|
}
|
|
|
|
await tester.pumpWidget(new GalleryApp(onSendFeedback: mockOnSendFeedback));
|
|
await tester.pump(); // see https://github.com/flutter/flutter/issues/1865
|
|
await tester.pump(); // triggers a frame
|
|
|
|
final Finder finder = find.byWidgetPredicate((Widget widget) {
|
|
return widget is Tooltip && widget.message == 'Open navigation menu';
|
|
});
|
|
expect(finder, findsOneWidget);
|
|
|
|
// Open drawer
|
|
await tester.tap(finder);
|
|
await tester.pump(); // start animation
|
|
await tester.pump(const Duration(seconds: 1)); // end animation
|
|
|
|
MaterialApp app = find.byType(MaterialApp).evaluate().first.widget;
|
|
expect(app.theme.brightness, equals(Brightness.light));
|
|
|
|
// Change theme
|
|
await tester.tap(find.text('Dark'));
|
|
await tester.pump(); // start animation
|
|
await tester.pump(const Duration(seconds: 1)); // end animation
|
|
app = find.byType(MaterialApp).evaluate().first.widget;
|
|
expect(app.theme.brightness, equals(Brightness.dark));
|
|
expect(app.theme.platform, equals(TargetPlatform.android));
|
|
|
|
// Change platform
|
|
await tester.tap(find.text('iOS'));
|
|
await tester.pump(); // start animation
|
|
await tester.pump(const Duration(seconds: 1)); // end animation
|
|
app = find.byType(MaterialApp).evaluate().first.widget;
|
|
expect(app.theme.platform, equals(TargetPlatform.iOS));
|
|
|
|
// Verify the font scale.
|
|
final Size origTextSize = tester.getSize(find.text('Small'));
|
|
expect(origTextSize, equals(const Size(176.0, 14.0)));
|
|
|
|
// Switch font scale.
|
|
await tester.tap(find.text('Small'));
|
|
await tester.pump();
|
|
await tester.pump(const Duration(seconds: 1)); // Wait until it's changed.
|
|
final Size textSize = tester.getSize(find.text('Small'));
|
|
expect(textSize, equals(const Size(176.0, 11.0)));
|
|
|
|
// Set font scale back to default.
|
|
await tester.tap(find.text('System Default'));
|
|
await tester.pump();
|
|
await tester.pump(const Duration(seconds: 1)); // Wait until it's changed.
|
|
final Size newTextSize = tester.getSize(find.text('Small'));
|
|
expect(newTextSize, equals(origTextSize));
|
|
|
|
// Scroll to the bottom of the menu.
|
|
await tester.drag(find.text('Small'), const Offset(0.0, -1000.0));
|
|
await tester.pump();
|
|
await tester.pump(const Duration(seconds: 1)); // Wait until it's changed.
|
|
|
|
// Test slow animations.
|
|
expect(timeDilation, equals(1.0));
|
|
await tester.tap(find.text('Animate Slowly'));
|
|
await tester.pump();
|
|
await tester.pump(const Duration(seconds: 1)); // Wait until it's changed.
|
|
expect(timeDilation, greaterThan(1.0));
|
|
|
|
// Put back time dilation (so as not to throw off tests after this one).
|
|
await tester.tap(find.text('Animate Slowly'));
|
|
await tester.pump();
|
|
await tester.pump(const Duration(seconds: 1)); // Wait until it's changed.
|
|
expect(timeDilation, equals(1.0));
|
|
|
|
// Send feedback.
|
|
expect(hasFeedback, false);
|
|
await tester.tap(find.text('Send feedback'));
|
|
await tester.pump();
|
|
expect(hasFeedback, true);
|
|
|
|
// Close drawer
|
|
await tester.tap(find.byType(DrawerController));
|
|
await tester.pump(); // start animation
|
|
await tester.pump(const Duration(seconds: 1)); // end animation
|
|
});
|
|
}
|