time_picker_test.dart 4.05 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 18 19 20 21 22 23 24 25 26 27 28
      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
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
  });

59
  testWidgets('drag-select an hour', (WidgetTester tester) async {
60 61 62
    Key _timePickerKey = new UniqueKey();
    TimeOfDay _selectedTime = const TimeOfDay(hour: 7, minute: 0);

63
    await tester.pumpWidget(
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
      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
79 80
                )
              )
81 82 83 84 85 86 87 88 89 90 91 92
            )
          );
        }
      )
    );

    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);

93 94 95 96 97
    TestGesture gesture;

    gesture = await tester.startGesture(hour3);
    await gesture.moveBy(hour0 - hour3);
    await gesture.up();
98
    expect(_selectedTime.hour, equals(0));
99 100
    await tester.pump(const Duration(seconds: 1)); // Finish gesture animation.
    await tester.pump(const Duration(seconds: 1)); // Finish settling animation.
101

102 103 104
    gesture = await tester.startGesture(hour0);
    await gesture.moveBy(hour3 - hour0);
    await gesture.up();
105
    expect(_selectedTime.hour, equals(3));
106 107
    await tester.pump(const Duration(seconds: 1));
    await tester.pump(const Duration(seconds: 1));
108

109 110 111
    gesture = await tester.startGesture(hour3);
    await gesture.moveBy(hour6 - hour3);
    await gesture.up();
112
    expect(_selectedTime.hour, equals(6));
113 114
    await tester.pump(const Duration(seconds: 1));
    await tester.pump(const Duration(seconds: 1));
115

116 117 118
    gesture = await tester.startGesture(hour6);
    await gesture.moveBy(hour9 - hour6);
    await gesture.up();
119
    expect(_selectedTime.hour, equals(9));
120 121
    await tester.pump(const Duration(seconds: 1));
    await tester.pump(const Duration(seconds: 1));
Hans Muller's avatar
Hans Muller committed
122 123
  });
}