drawer_test.dart 3.5 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
// 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;

18 19
    await tester.pumpWidget(
      new 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 34 35

    MaterialApp app = find.byType(MaterialApp).evaluate().first.widget;
    expect(app.theme.brightness, equals(Brightness.light));

36 37 38
    // Switch to the dark theme: first switch control
    await tester.tap(find.byType(Switch).first);
    await tester.pumpAndSettle();
39 40 41 42
    app = find.byType(MaterialApp).evaluate().first.widget;
    expect(app.theme.brightness, equals(Brightness.dark));
    expect(app.theme.platform, equals(TargetPlatform.android));

43 44 45 46 47
    // Popup the platform menu: second menu button, choose 'Cupertino'
    await tester.tap(find.byIcon(Icons.arrow_drop_down).at(1));
    await tester.pumpAndSettle();
    await tester.tap(find.text('Cupertino').at(1));
    await tester.pumpAndSettle();
48 49 50 51
    app = find.byType(MaterialApp).evaluate().first.widget;
    expect(app.theme.platform, equals(TargetPlatform.iOS));

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

55 56 57
    // Popup the text size menu: first menu button, choose 'Small'
    await tester.tap(find.byIcon(Icons.arrow_drop_down).first);
    await tester.pumpAndSettle();
58
    await tester.tap(find.text('Small'));
59 60 61
    await tester.pumpAndSettle();
    Size textSize = tester.getSize(find.text('Text size'));
    expect(textSize, equals(const Size(116.0, 13.0)));
62

63 64 65
    // Set font scale back to the default.
    await tester.tap(find.byIcon(Icons.arrow_drop_down).first);
    await tester.pumpAndSettle();
66
    await tester.tap(find.text('System Default'));
67 68 69 70 71 72 73 74
    await tester.pumpAndSettle();
    textSize = tester.getSize(find.text('Text size'));
    expect(textSize, origTextSize);

    // Switch to slow animation: third switch control
    expect(timeDilation, 1.0);
    await tester.tap(find.byType(Switch).at(2));
    await tester.pumpAndSettle();
75 76
    expect(timeDilation, greaterThan(1.0));

77 78 79 80
    // Restore normal animation: third switch control
    await tester.tap(find.byType(Switch).at(2));
    await tester.pumpAndSettle();
    expect(timeDilation, 1.0);
81 82 83

    // Send feedback.
    expect(hasFeedback, false);
84 85 86 87

    // Scroll to the end
    await tester.drag(find.text('Text size'), const Offset(0.0, -1000.0));
    await tester.pumpAndSettle();
88
    await tester.tap(find.text('Send feedback'));
89
    await tester.pumpAndSettle();
90 91
    expect(hasFeedback, true);

92
    // Hide the options page
93
    await tester.tap(find.byTooltip('Toggle options page'));
94
    await tester.pumpAndSettle();
95 96
  });
}