time_picker_test.dart 4.44 KB
Newer Older
Hans Muller's avatar
Hans Muller committed
1 2 3 4 5 6 7 8
// 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() {
9
  testWidgets('tap-select an hour', (WidgetTester tester) async {
10 11 12
    Key _timePickerKey = new UniqueKey();
    TimeOfDay _selectedTime = const TimeOfDay(hour: 7, minute: 0);

13
    await tester.pumpWidget(
14 15 16 17
      new StatefulBuilder(
        builder: (BuildContext context, StateSetter setState) {
          return new Material(
            child: new Center(
Ian Hickson's avatar
Ian Hickson committed
18
              child: new SizedBox(
19 20 21 22 23 24 25 26 27 28
                width: 200.0,
                height: 400.0,
                child: new TimePicker(
                  key: _timePickerKey,
                  selectedTime: _selectedTime,
                  onChanged: (TimeOfDay value) {
                    setState(() {
                      _selectedTime = value;
                    });
                  }
Hans Muller's avatar
Hans Muller committed
29 30
                )
              )
31 32 33 34 35
            )
          );
        }
      )
    );
Hans Muller's avatar
Hans Muller committed
36

37
    Point center = tester.getCenter(find.byKey(_timePickerKey));
Hans Muller's avatar
Hans Muller committed
38

39
    Point hour0 = new Point(center.x, center.y - 50.0); // 12:00 AM
40
    await tester.tapAt(hour0);
41
    expect(_selectedTime.hour, equals(0));
Hans Muller's avatar
Hans Muller committed
42

43
    Point hour3 = new Point(center.x + 50.0, center.y);
44
    await tester.tapAt(hour3);
45
    expect(_selectedTime.hour, equals(3));
Hans Muller's avatar
Hans Muller committed
46

47
    Point hour6 = new Point(center.x, center.y + 50.0);
48
    await tester.tapAt(hour6);
49
    expect(_selectedTime.hour, equals(6));
Hans Muller's avatar
Hans Muller committed
50

51
    Point hour9 = new Point(center.x - 50.0, center.y);
52
    await tester.tapAt(hour9);
53
    expect(_selectedTime.hour, equals(9));
Hans Muller's avatar
Hans Muller committed
54

55 56
    await tester.pump(const Duration(seconds: 1)); // Finish gesture animation.
    await tester.pump(const Duration(seconds: 1)); // Finish settling animation.
Hans Muller's avatar
Hans Muller committed
57 58
  });

Ian Hickson's avatar
Ian Hickson committed
59 60 61 62 63 64 65 66 67 68 69 70 71 72
  testWidgets('render picker with intrinsic dimensions', (WidgetTester tester) async {
    await tester.pumpWidget(
      new IntrinsicWidth(
        child: new IntrinsicHeight(
          child: new TimePicker(
            onChanged: null,
            selectedTime: new TimeOfDay(hour: 0, minute: 0)
          )
        )
      )
    );
    await tester.pump(const Duration(seconds: 5));
  });

73
  testWidgets('drag-select an hour', (WidgetTester tester) async {
74 75 76
    Key _timePickerKey = new UniqueKey();
    TimeOfDay _selectedTime = const TimeOfDay(hour: 7, minute: 0);

77
    await tester.pumpWidget(
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
      new StatefulBuilder(
        builder: (BuildContext context, StateSetter setState) {
          return new Material(
            child: new Center(
                child: new SizedBox(
                width: 200.0,
                height: 400.0,
                child: new TimePicker(
                  key: _timePickerKey,
                  selectedTime: _selectedTime,
                  onChanged: (TimeOfDay value) {
                    setState(() {
                      _selectedTime = value;
                    });
                  }
Hans Muller's avatar
Hans Muller committed
93 94
                )
              )
95 96 97 98 99 100 101 102 103 104 105 106
            )
          );
        }
      )
    );

    Point center = tester.getCenter(find.byKey(_timePickerKey));
    Point hour0 = new Point(center.x, center.y - 50.0); // 12:00 AM
    Point hour3 = new Point(center.x + 50.0, center.y);
    Point hour6 = new Point(center.x, center.y + 50.0);
    Point hour9 = new Point(center.x - 50.0, center.y);

107 108 109 110 111
    TestGesture gesture;

    gesture = await tester.startGesture(hour3);
    await gesture.moveBy(hour0 - hour3);
    await gesture.up();
112
    expect(_selectedTime.hour, equals(0));
113 114
    await tester.pump(const Duration(seconds: 1)); // Finish gesture animation.
    await tester.pump(const Duration(seconds: 1)); // Finish settling animation.
115

116 117 118
    gesture = await tester.startGesture(hour0);
    await gesture.moveBy(hour3 - hour0);
    await gesture.up();
119
    expect(_selectedTime.hour, equals(3));
120 121
    await tester.pump(const Duration(seconds: 1));
    await tester.pump(const Duration(seconds: 1));
122

123 124 125
    gesture = await tester.startGesture(hour3);
    await gesture.moveBy(hour6 - hour3);
    await gesture.up();
126
    expect(_selectedTime.hour, equals(6));
127 128
    await tester.pump(const Duration(seconds: 1));
    await tester.pump(const Duration(seconds: 1));
129

130 131 132
    gesture = await tester.startGesture(hour6);
    await gesture.moveBy(hour9 - hour6);
    await gesture.up();
133
    expect(_selectedTime.hour, equals(9));
134 135
    await tester.pump(const Duration(seconds: 1));
    await tester.pump(const Duration(seconds: 1));
Hans Muller's avatar
Hans Muller committed
136 137
  });
}