pageable_list_test.dart 3.09 KB
Newer Older
1
import 'package:flutter/widgets.dart';
2 3
import 'package:test/test.dart';

Adam Barth's avatar
Adam Barth committed
4
import 'widget_tester.dart';
5

6 7 8
const Size pageSize = const Size(800.0, 600.0);
const List<int> pages = const <int>[0, 1, 2, 3, 4, 5];
int currentPage = null;
9
bool itemsWrap = false;
10

11
Widget buildPage(BuildContext context, int page) {
12 13 14 15 16 17 18 19
  return new Container(
    key: new ValueKey<int>(page),
    width: pageSize.width,
    height: pageSize.height,
    child: new Text(page.toString())
  );
}

20
Widget buildFrame() {
21
  // The test framework forces the frame (and so the PageableList)
22
  // to be 800x600. The pageSize constant reflects this.
23 24 25 26 27 28
  return new PageableList<int>(
    items: pages,
    itemBuilder: buildPage,
    itemsWrap: itemsWrap,
    itemExtent: pageSize.width,
    scrollDirection: ScrollDirection.horizontal,
29
    onPageChanged: (int page) { currentPage = page; }
30 31 32 33 34
  );
}

void page(WidgetTester tester, Offset offset) {
  String itemText = currentPage != null ? currentPage.toString() : '0';
35 36 37 38
  tester.scroll(tester.findText(itemText), offset);
  // One frame to start the animation, a second to complete it.
  tester.pump();
  tester.pump(const Duration(seconds: 1));
39 40 41 42 43 44 45 46 47 48
}

void pageLeft(WidgetTester tester) {
  page(tester, new Offset(-pageSize.width, 0.0));
}

void pageRight(WidgetTester tester) {
  page(tester, new Offset(pageSize.width, 0.0));
}

49
void main() {
50 51 52
  // PageableList with itemsWrap: false

  test('Scroll left from page 0 to page 1', () {
53 54 55 56 57 58 59 60
    testWidgets((WidgetTester tester) {
      currentPage = null;
      itemsWrap = false;
      tester.pumpWidget(buildFrame());
      expect(currentPage, isNull);
      pageLeft(tester);
      expect(currentPage, equals(1));
    });
61 62
  });

63
  test('Scroll right from page 1 to page 0', () {
64 65 66 67 68 69 70
    testWidgets((WidgetTester tester) {
      itemsWrap = false;
      tester.pumpWidget(buildFrame());
      expect(currentPage, equals(1));
      pageRight(tester);
      expect(currentPage, equals(0));
    });
71 72
  });

73
  test('Scroll right from page 0 does nothing (underscroll)', () {
74 75 76 77 78 79 80
    testWidgets((WidgetTester tester) {
      itemsWrap = false;
      tester.pumpWidget(buildFrame());
      expect(currentPage, equals(0));
      pageRight(tester);
      expect(currentPage, equals(0));
    });
81
  });
82

83
  // PageableList with itemsWrap: true
84

85
  test('Scroll left page 0 to page 1, itemsWrap: true', () {
86 87 88 89 90 91 92 93 94
    testWidgets((WidgetTester tester) {
      tester.pumpWidget(new Container());
      currentPage = null;
      itemsWrap = true;
      tester.pumpWidget(buildFrame());
      expect(currentPage, isNull);
      pageLeft(tester);
      expect(currentPage, equals(1));
    });
95
  });
96

97
  test('Scroll right from page 1 to page 0, itemsWrap: true', () {
98 99 100 101 102 103
    testWidgets((WidgetTester tester) {
      tester.pumpWidget(buildFrame());
      expect(currentPage, equals(1));
      pageRight(tester);
      expect(currentPage, equals(0));
    });
104 105 106
  });

  test('Scroll right from page 0 to page 5, itemsWrap: true (underscroll)', () {
107 108 109 110 111 112
    testWidgets((WidgetTester tester) {
      tester.pumpWidget(buildFrame());
      expect(currentPage, equals(0));
      pageRight(tester);
      expect(currentPage, equals(5));
    });
113 114
  });
}