block_test.dart 3.34 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 12
import 'package:test/test.dart';

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

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

      Point middleOfContainer = tester.getCenter(tester.findText('Hello'));
      Point target = tester.getCenter(tester.findElementByKey(blockKey));
Adam Barth's avatar
Adam Barth committed
28 29
      TestGesture gesture = tester.startGesture(target);
      gesture.moveBy(const Offset(0.0, -10.0));
30 31 32 33 34

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

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

Adam Barth's avatar
Adam Barth committed
35
      gesture.up();
36
    });
Hixie's avatar
Hixie committed
37 38 39
  });

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

      Point middleOfContainer = tester.getCenter(tester.findText('Hello'));
54 55 56
      expect(middleOfContainer.x, equals(400.0));
      expect(middleOfContainer.y, equals(1000.0));

57
      Point target = tester.getCenter(tester.findElementByKey(blockKey));
Adam Barth's avatar
Adam Barth committed
58 59
      TestGesture gesture = tester.startGesture(target);
      gesture.moveBy(const Offset(0.0, -10.0));
60

61
      tester.pump(); // redo layout
62

63
      expect(tester.getCenter(tester.findText('Hello')), isNot(equals(middleOfContainer)));
64

Adam Barth's avatar
Adam Barth committed
65
      gesture.up();
66
    });
Hixie's avatar
Hixie committed
67
  });
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114

  test('Scroll anchor', () {
    testWidgets((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)
                )
              )
            ),
            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)
                )
              )
            )
          ]
        );
      }

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

      Point target = const Point(200.0, 200.0);
      tester.tapAt(target);
      expect(first, equals(0));
      expect(second, equals(1));

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

      tester.tapAt(target);
      expect(first, equals(1));
      expect(second, equals(1));
    });
  });
Hixie's avatar
Hixie committed
115
}