block_test.dart 3.64 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 28 29 30 31 32 33 34 35 36 37 38
      );
      tester.pump(); // for SizeObservers

      Point middleOfContainer = tester.getCenter(tester.findText('Hello'));
      Point target = tester.getCenter(tester.findElementByKey(blockKey));
      TestPointer pointer = new TestPointer();
      tester.dispatchEvent(pointer.down(target), target);
      tester.dispatchEvent(pointer.move(target + const Offset(0.0, -10.0)), target);

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

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

      tester.dispatchEvent(pointer.up(), target);
    });
Hixie's avatar
Hixie committed
39 40 41
  });

  test('Can scroll an overflowing block', () {
42 43
    testWidgets((WidgetTester tester) {
      tester.pumpWidget(
44 45 46 47 48 49 50 51 52
        new Block(
          key: blockKey,
          children: <Widget>[
            new Container(
              height: 2000.0, // more than 600, the height of the test area
              child: new Text('Hello')
            )
          ]
        )
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
      );
      tester.pump(); // for SizeObservers

      Point middleOfContainer = tester.getCenter(tester.findText('Hello'));
      Point target = tester.getCenter(tester.findElementByKey(blockKey));
      TestPointer pointer = new TestPointer();
      tester.dispatchEvent(pointer.down(target), target);
      tester.dispatchEvent(pointer.move(target + const Offset(0.0, -10.0)), target);

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

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

      tester.dispatchEvent(pointer.up(), target);
    });
Hixie's avatar
Hixie committed
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 115 116 117

  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));
      tester.pump(); // for SizeObservers

      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.pump(); // for SizeObservers

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