mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00

This lets us preview widgets in the gallery using small, normal, large, and HUGE text. Added selections to the main drawer for these options. Defaults to "normal", obviously.
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, -450.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
|
|
});
|
|
}
|