time_picker_test.dart 4.04 KB
Newer Older
Hans Muller's avatar
Hans Muller committed
1 2 3 4 5 6 7
// 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';

8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
class _TimePickerLauncher extends StatelessWidget {
  _TimePickerLauncher({ Key key, this.onChanged }) : super(key: key);

  final ValueChanged<TimeOfDay> onChanged;

  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      home: new Material(
        child: new Center(
          child: new Builder(
            builder: (BuildContext context) {
              return new RaisedButton(
                child: new Text('X'),
                onPressed: () async {
                  onChanged(await showTimePicker(
                    context: context,
                    initialTime: const TimeOfDay(hour: 7, minute: 0)
                  ));
                }
              );
            }
          )
        )
32 33
      )
    );
34 35
  }
}
Hans Muller's avatar
Hans Muller committed
36

37 38 39
Future<Point> startPicker(WidgetTester tester, ValueChanged<TimeOfDay> onChanged) async {
  await tester.pumpWidget(new _TimePickerLauncher(onChanged: onChanged));
  await tester.tap(find.text('X'));
Hans Muller's avatar
Hans Muller committed
40

41 42
  await tester.pump(); // start animation
  await tester.pump(const Duration(seconds: 1));
Hans Muller's avatar
Hans Muller committed
43

44 45
  return tester.getCenter(find.byKey(new Key('time-picker-dial')));
}
Hans Muller's avatar
Hans Muller committed
46

47 48
Future<Null> finishPicker(WidgetTester tester) async {
  await tester.tap(find.text('OK'));
Hans Muller's avatar
Hans Muller committed
49

50 51 52
  await tester.pump(); // start animation
  await tester.pump(const Duration(seconds: 1));
}
Hans Muller's avatar
Hans Muller committed
53

54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
void main() {
  testWidgets('tap-select an hour', (WidgetTester tester) async {
    TimeOfDay result;

    Point center = await startPicker(tester, (TimeOfDay time) { result = time; });
    await tester.tapAt(new Point(center.x, center.y - 50.0)); // 12:00 AM
    await finishPicker(tester);
    expect(result, equals(const TimeOfDay(hour: 0, minute: 0)));

    center = await startPicker(tester, (TimeOfDay time) { result = time; });
    await tester.tapAt(new Point(center.x + 50.0, center.y));
    await finishPicker(tester);
    expect(result, equals(const TimeOfDay(hour: 3, minute: 0)));

    center = await startPicker(tester, (TimeOfDay time) { result = time; });
    await tester.tapAt(new Point(center.x, center.y + 50.0));
    await finishPicker(tester);
    expect(result, equals(const TimeOfDay(hour: 6, minute: 0)));

    center = await startPicker(tester, (TimeOfDay time) { result = time; });
    await tester.tapAt(new Point(center.x, center.y + 50.0));
    await tester.tapAt(new Point(center.x - 50, center.y));
    await finishPicker(tester);
    expect(result, equals(const TimeOfDay(hour: 9, minute: 0)));
Ian Hickson's avatar
Ian Hickson committed
78 79
  });

80
  testWidgets('drag-select an hour', (WidgetTester tester) async {
81
    TimeOfDay result;
82

83
    Point center = await startPicker(tester, (TimeOfDay time) { result = time; });
84 85 86 87 88
    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);

89 90 91 92 93
    TestGesture gesture;

    gesture = await tester.startGesture(hour3);
    await gesture.moveBy(hour0 - hour3);
    await gesture.up();
94 95
    await finishPicker(tester);
    expect(result.hour, 0);
96

97
    expect(await startPicker(tester, (TimeOfDay time) { result = time; }), equals(center));
98 99 100
    gesture = await tester.startGesture(hour0);
    await gesture.moveBy(hour3 - hour0);
    await gesture.up();
101 102
    await finishPicker(tester);
    expect(result.hour, 3);
103

104
    expect(await startPicker(tester, (TimeOfDay time) { result = time; }), equals(center));
105 106 107
    gesture = await tester.startGesture(hour3);
    await gesture.moveBy(hour6 - hour3);
    await gesture.up();
108 109
    await finishPicker(tester);
    expect(result.hour, equals(6));
110

111
    expect(await startPicker(tester, (TimeOfDay time) { result = time; }), equals(center));
112 113 114
    gesture = await tester.startGesture(hour6);
    await gesture.moveBy(hour9 - hour6);
    await gesture.up();
115 116
    await finishPicker(tester);
    expect(result.hour, equals(9));
Hans Muller's avatar
Hans Muller committed
117 118
  });
}