two_level_list_test.dart 4.08 KB
Newer Older
Hans Muller's avatar
Hans Muller committed
1 2 3 4 5 6 7 8 9
// Copyright 2016 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:flutter/material.dart';

void main() {
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
  testWidgets('TwoLevelList default control', (WidgetTester tester) async {
    await tester.pumpWidget(new Center(child: new TwoLevelList()));

    await tester.pumpWidget(
      new Material(
        child: new Center(
          child: new TwoLevelList(
            children: <Widget>[
              new TwoLevelSublist(
                title: new Text('Title'),
              )
            ]
          )
        )
      )
    );
  });

  testWidgets('TwoLevelList basics', (WidgetTester tester) async {
Hans Muller's avatar
Hans Muller committed
29 30 31 32
    final Key topKey = new UniqueKey();
    final Key sublistKey = new UniqueKey();
    final Key bottomKey = new UniqueKey();

33
    final Map<String, WidgetBuilder> routes = <String, WidgetBuilder>{
Hans Muller's avatar
Hans Muller committed
34 35
      '/': (_) {
        return new Material(
36
          child: new SingleChildScrollView(
Hans Muller's avatar
Hans Muller committed
37
            child: new TwoLevelList(
38
              children: <Widget>[
39
                new TwoLevelListItem(title: new Text('Top'), key: topKey),
Hans Muller's avatar
Hans Muller committed
40 41
                new TwoLevelSublist(
                  key: sublistKey,
42
                  title: new Text('Sublist'),
Hans Muller's avatar
Hans Muller committed
43
                  children: <Widget>[
44 45
                    new TwoLevelListItem(title: new Text('0')),
                    new TwoLevelListItem(title: new Text('1'))
Hans Muller's avatar
Hans Muller committed
46 47
                  ]
                ),
48
                new TwoLevelListItem(title: new Text('Bottom'), key: bottomKey)
Hans Muller's avatar
Hans Muller committed
49 50 51 52 53 54 55
              ]
            )
          )
        );
      }
    };

56
    await tester.pumpWidget(new MaterialApp(routes: routes));
Hans Muller's avatar
Hans Muller committed
57

58 59 60
    expect(find.text('Top'), findsOneWidget);
    expect(find.text('Sublist'), findsOneWidget);
    expect(find.text('Bottom'), findsOneWidget);
Hans Muller's avatar
Hans Muller committed
61

62 63
    double getY(Key key) => tester.getTopLeft(find.byKey(key)).y;
    double getHeight(Key key) => tester.getSize(find.byKey(key)).height;
Hans Muller's avatar
Hans Muller committed
64

65 66
    expect(getY(topKey), lessThan(getY(sublistKey)));
    expect(getY(sublistKey), lessThan(getY(bottomKey)));
Hans Muller's avatar
Hans Muller committed
67

68 69 70
    // The sublist has a one pixel border above and below.
    expect(getHeight(topKey), equals(getHeight(sublistKey) - 2.0));
    expect(getHeight(bottomKey), equals(getHeight(sublistKey) - 2.0));
Hans Muller's avatar
Hans Muller committed
71

72 73 74
    await tester.tap(find.text('Sublist'));
    await tester.pump(const Duration(seconds: 1));
    await tester.pump(const Duration(seconds: 1));
Hans Muller's avatar
Hans Muller committed
75

76 77 78 79 80
    expect(find.text('Top'), findsOneWidget);
    expect(find.text('Sublist'), findsOneWidget);
    expect(find.text('0'), findsOneWidget);
    expect(find.text('1'), findsOneWidget);
    expect(find.text('Bottom'), findsOneWidget);
Hans Muller's avatar
Hans Muller committed
81

82 83 84 85
    expect(getY(topKey), lessThan(getY(sublistKey)));
    expect(getY(sublistKey), lessThan(getY(bottomKey)));
    expect(getY(bottomKey) - getY(sublistKey), greaterThan(getHeight(topKey)));
    expect(getY(bottomKey) - getY(sublistKey), greaterThan(getHeight(bottomKey)));
Hans Muller's avatar
Hans Muller committed
86
  });
87 88 89 90 91 92 93

  testWidgets('onOpenChanged callback', (WidgetTester tester) async {
    bool didChangeOpen;

    final Map<String, WidgetBuilder> routes = <String, WidgetBuilder>{
      '/': (_) {
        return new Material(
94
          child: new SingleChildScrollView(
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
            child: new TwoLevelList(
              children: <Widget>[
                new TwoLevelSublist(
                  title: new Text('Sublist'),
                  onOpenChanged: (bool opened) {
                    didChangeOpen = opened;
                  },
                  children: <Widget>[
                    new TwoLevelListItem(title: new Text('0')),
                    new TwoLevelListItem(title: new Text('1'))
                  ]
                ),
              ]
            )
          )
        );
      }
    };

    await tester.pumpWidget(new MaterialApp(routes: routes));

    expect(didChangeOpen, isNull);
    await tester.tap(find.text('Sublist'));
    expect(didChangeOpen, isTrue);
    await tester.pump();
    await tester.pump(const Duration(seconds: 1));
    await tester.tap(find.text('Sublist'));
    expect(didChangeOpen, isFalse);
  });
Hans Muller's avatar
Hans Muller committed
124
}