block_test.dart 3.08 KB
Newer Older
Hixie's avatar
Hixie committed
1 2 3 4
// Copyright 2015 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.

Adam Barth's avatar
Adam Barth committed
5
import 'package:flutter_test/flutter_test.dart';
6
import 'package:flutter/widgets.dart';
Hixie's avatar
Hixie committed
7 8 9 10 11
import 'package:test/test.dart';

final Key blockKey = new Key('test');

void main() {
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
  testWidgets('Cannot scroll a non-overflowing block', (WidgetTester tester) {
    tester.pumpWidget(
      new Block(
        key: blockKey,
        children: <Widget>[
          new Container(
            height: 200.0, // less than 600, the height of the test area
            child: new Text('Hello')
          )
        ]
      )
    );

    Point middleOfContainer = tester.getCenter(find.text('Hello'));
    Point target = tester.getCenter(find.byKey(blockKey));
    TestGesture gesture = tester.startGesture(target);
    gesture.moveBy(const Offset(0.0, -10.0));

    tester.pump(const Duration(milliseconds: 1));

    expect(tester.getCenter(find.text('Hello')) == middleOfContainer, isTrue);

    gesture.up();
Hixie's avatar
Hixie committed
35 36
  });

37 38 39 40 41 42 43 44 45 46 47 48
  testWidgets('Can scroll an overflowing block', (WidgetTester tester) {
    tester.pumpWidget(
      new Block(
        key: blockKey,
        children: <Widget>[
          new Container(
            height: 2000.0, // more than 600, the height of the test area
            child: new Text('Hello')
          )
        ]
      )
    );
49

50 51 52
    Point middleOfContainer = tester.getCenter(find.text('Hello'));
    expect(middleOfContainer.x, equals(400.0));
    expect(middleOfContainer.y, equals(1000.0));
53

54 55 56
    Point target = tester.getCenter(find.byKey(blockKey));
    TestGesture gesture = tester.startGesture(target);
    gesture.moveBy(const Offset(0.0, -10.0));
57

58
    tester.pump(); // redo layout
59

60
    expect(tester.getCenter(find.text('Hello')), isNot(equals(middleOfContainer)));
61

62
    gesture.up();
Hixie's avatar
Hixie committed
63
  });
64

65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
  testWidgets('Scroll anchor', (WidgetTester tester) {
    int first = 0;
    int second = 0;

    Widget buildBlock(ViewportAnchor scrollAnchor) {
      return new Block(
        key: new UniqueKey(),
        scrollAnchor: scrollAnchor,
        children: <Widget>[
          new GestureDetector(
            onTap: () { ++first; },
            child: new Container(
              height: 2000.0, // more than 600, the height of the test area
              decoration: new BoxDecoration(
                backgroundColor: new Color(0xFF00FF00)
80
              )
81 82 83 84 85 86 87 88
            )
          ),
          new GestureDetector(
            onTap: () { ++second; },
            child: new Container(
              height: 2000.0, // more than 600, the height of the test area
              decoration: new BoxDecoration(
                backgroundColor: new Color(0xFF0000FF)
89 90
              )
            )
91 92 93 94
          )
        ]
      );
    }
95

96
    tester.pumpWidget(buildBlock(ViewportAnchor.end));
97

98 99 100 101
    Point target = const Point(200.0, 200.0);
    tester.tapAt(target);
    expect(first, equals(0));
    expect(second, equals(1));
102

103
    tester.pumpWidget(buildBlock(ViewportAnchor.start));
104

105 106 107
    tester.tapAt(target);
    expect(first, equals(1));
    expect(second, equals(1));
108
  });
Hixie's avatar
Hixie committed
109
}