drawer_test.dart 4.42 KB
Newer Older
Ian Hickson's avatar
Ian Hickson committed
1
// Copyright 2014 The Flutter Authors. All rights reserved.
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
// 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;

18
    await tester.pumpWidget(
19
      GalleryApp(
20
        testMode: true,
21 22 23 24 25
        onSendFeedback: () {
          hasFeedback = true;
        },
      ),
    );
26 27 28
    await tester.pump(); // see https://github.com/flutter/flutter/issues/1865
    await tester.pump(); // triggers a frame

29
    // Show the options page
30
    await tester.tap(find.byTooltip('Toggle options page'));
31
    await tester.pumpAndSettle();
32

33
    // Verify theme settings
34 35
    MaterialApp app = find.byType(MaterialApp).evaluate().first.widget;
    expect(app.theme.brightness, equals(Brightness.light));
36
    expect(app.darkTheme.brightness, equals(Brightness.dark));
37

38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
    // Switch to the dark theme: first menu button, choose 'Dark'
    await tester.tap(find.byIcon(Icons.arrow_drop_down).first);
    await tester.pumpAndSettle();
    await tester.tap(find.text('Dark'));
    await tester.pumpAndSettle();
    app = find.byType(MaterialApp).evaluate().first.widget;
    expect(app.themeMode, ThemeMode.dark);

    // Switch to the light theme: first menu button, choose 'Light'
    await tester.tap(find.byIcon(Icons.arrow_drop_down).first);
    await tester.pumpAndSettle();
    await tester.tap(find.text('Light'));
    await tester.pumpAndSettle();
    app = find.byType(MaterialApp).evaluate().first.widget;
    expect(app.themeMode, ThemeMode.light);

    // Switch back to system theme setting: first menu button, choose 'System Default'
    await tester.tap(find.byIcon(Icons.arrow_drop_down).first);
    await tester.pumpAndSettle();
    await tester.tap(find.text('System Default').at(1));
58
    await tester.pumpAndSettle();
59
    app = find.byType(MaterialApp).evaluate().first.widget;
60 61 62
    expect(app.themeMode, ThemeMode.system);

    // Verify platform settings
63 64
    expect(app.theme.platform, equals(TargetPlatform.android));

65 66
    // Popup the platform menu: third menu button, choose 'Cupertino'
    await tester.tap(find.byIcon(Icons.arrow_drop_down).at(2));
67 68 69
    await tester.pumpAndSettle();
    await tester.tap(find.text('Cupertino').at(1));
    await tester.pumpAndSettle();
70 71 72 73
    app = find.byType(MaterialApp).evaluate().first.widget;
    expect(app.theme.platform, equals(TargetPlatform.iOS));

    // Verify the font scale.
74 75
    final Size origTextSize = tester.getSize(find.text('Text size'));
    expect(origTextSize, equals(const Size(144.0, 16.0)));
76

77 78
    // Popup the text size menu: second menu button, choose 'Small'
    await tester.tap(find.byIcon(Icons.arrow_drop_down).at(1));
79
    await tester.pumpAndSettle();
80
    await tester.tap(find.text('Small'));
81 82 83
    await tester.pumpAndSettle();
    Size textSize = tester.getSize(find.text('Text size'));
    expect(textSize, equals(const Size(116.0, 13.0)));
84

85
    // Set font scale back to the default.
86
    await tester.tap(find.byIcon(Icons.arrow_drop_down).at(1));
87
    await tester.pumpAndSettle();
88
    await tester.tap(find.text('System Default').at(1));
89 90 91 92
    await tester.pumpAndSettle();
    textSize = tester.getSize(find.text('Text size'));
    expect(textSize, origTextSize);

93
    // Switch to slow animation: second switch control
94
    expect(timeDilation, 1.0);
95
    await tester.tap(find.byType(Switch).at(1));
96
    await tester.pumpAndSettle();
97 98
    expect(timeDilation, greaterThan(1.0));

99 100
    // Restore normal animation: second switch control
    await tester.tap(find.byType(Switch).at(1));
101 102
    await tester.pumpAndSettle();
    expect(timeDilation, 1.0);
103 104 105

    // Send feedback.
    expect(hasFeedback, false);
106 107 108 109

    // Scroll to the end
    await tester.drag(find.text('Text size'), const Offset(0.0, -1000.0));
    await tester.pumpAndSettle();
110
    await tester.tap(find.text('Send feedback'));
111
    await tester.pumpAndSettle();
112 113
    expect(hasFeedback, true);

114
    // Hide the options page
115
    await tester.tap(find.byTooltip('Toggle options page'));
116
    await tester.pumpAndSettle();
117 118
  });
}