// 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. import 'package:flutter_test/flutter_test.dart'; import 'package:flutter/widgets.dart'; import 'package:test/test.dart'; final Key blockKey = new Key('test'); void main() { test('Cannot scroll a non-overflowing block', () { testWidgets((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(tester.findText('Hello')); Point target = tester.getCenter(tester.findElementByKey(blockKey)); TestGesture gesture = tester.startGesture(target); gesture.moveBy(const Offset(0.0, -10.0)); tester.pump(const Duration(milliseconds: 1)); expect(tester.getCenter(tester.findText('Hello')) == middleOfContainer, isTrue); gesture.up(); }); }); test('Can scroll an overflowing block', () { testWidgets((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') ) ] ) ); Point middleOfContainer = tester.getCenter(tester.findText('Hello')); expect(middleOfContainer.x, equals(400.0)); expect(middleOfContainer.y, equals(1000.0)); Point target = tester.getCenter(tester.findElementByKey(blockKey)); TestGesture gesture = tester.startGesture(target); gesture.moveBy(const Offset(0.0, -10.0)); tester.pump(); // redo layout expect(tester.getCenter(tester.findText('Hello')), isNot(equals(middleOfContainer))); gesture.up(); }); }); 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)); }); }); }