Hixie baf06515e5 Table widget
- Add x and y to the parent data, in case it's useful. In point of fact,
  I ended up not needing it.

- Make columnWidths settable rather than having a setter so that the
  code in the widgets layer is more idiomatic.

- Teach setFlatChildren about avoiding unnecessary drop/adopt loops.

- Assert that the child list length is correct more aggressively so that
  we catch the dumb bug I had more quickly next time.

- Improve the toString() to handle empty tables better.

- Resort the imports in framework.dart.

- Introduce a LocalKey for cases where you don't want to allow use of
  GlobalKey.

- Make inflateWidget and deactivateChild public for subclass use.

- Table widget.

- Cell widget.

- TableRow fake widget.
2016-03-29 12:43:19 -07:00

345 lines
11 KiB
Dart

// 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/rendering.dart';
import 'package:flutter/widgets.dart';
import 'package:test/test.dart';
void main() {
test('Table widget - control test', () {
testWidgets((WidgetTester tester) {
tester.pumpWidget(
new Table(
children: <TableRow>[
new TableRow(
children: <Widget>[
new Text('AAAAAA'), new Text('B'), new Text('C')
]
),
new TableRow(
children: <Widget>[
new Text('D'), new Text('EEE'), new Text('F')
]
),
new TableRow(
children: <Widget>[
new Text('G'), new Text('H'), new Text('III')
]
),
]
)
);
RenderBox boxA = tester.findText('AAAAAA').findRenderObject();
RenderBox boxD = tester.findText('D').findRenderObject();
RenderBox boxG = tester.findText('G').findRenderObject();
RenderBox boxB = tester.findText('B').findRenderObject();
expect(boxA.size, equals(boxD.size));
expect(boxA.size, equals(boxG.size));
expect(boxA.size, equals(boxB.size));
});
});
test('Table widget - changing table dimensions', () {
testWidgets((WidgetTester tester) {
tester.pumpWidget(
new Table(
children: <TableRow>[
new TableRow(
children: <Widget>[
new Text('A'), new Text('B'), new Text('C')
]
),
new TableRow(
children: <Widget>[
new Text('D'), new Text('E'), new Text('F')
]
),
new TableRow(
children: <Widget>[
new Text('G'), new Text('H'), new Text('I')
]
),
]
)
);
RenderBox boxA1 = tester.findText('A').findRenderObject();
RenderBox boxG1 = tester.findText('G').findRenderObject();
expect(boxA1, isNotNull);
expect(boxG1, isNotNull);
tester.pumpWidget(
new Table(
children: <TableRow>[
new TableRow(
children: <Widget>[
new Text('a'), new Text('b'), new Text('c'), new Text('d')
]
),
new TableRow(
children: <Widget>[
new Text('e'), new Text('f'), new Text('g'), new Text('h')
]
),
]
)
);
RenderBox boxA2 = tester.findText('a').findRenderObject();
RenderBox boxG2 = tester.findText('g').findRenderObject();
expect(boxA2, isNotNull);
expect(boxG2, isNotNull);
expect(boxA1, equals(boxA2));
expect(boxG1, isNot(equals(boxG2)));
});
});
test('Table widget - repump test', () {
testWidgets((WidgetTester tester) {
tester.pumpWidget(
new Table(
children: <TableRow>[
new TableRow(
children: <Widget>[
new Text('AAAAAA'), new Text('B'), new Text('C')
]
),
new TableRow(
children: <Widget>[
new Text('D'), new Text('EEE'), new Text('F')
]
),
new TableRow(
children: <Widget>[
new Text('G'), new Text('H'), new Text('III')
]
),
]
)
);
tester.pumpWidget(
new Table(
children: <TableRow>[
new TableRow(
children: <Widget>[
new Text('AAA'), new Text('B'), new Text('C')
]
),
new TableRow(
children: <Widget>[
new Text('D'), new Text('E'), new Text('FFFFFF')
]
),
new TableRow(
children: <Widget>[
new Text('G'), new Text('H'), new Text('III')
]
),
]
)
);
RenderBox boxA = tester.findText('AAA').findRenderObject();
RenderBox boxD = tester.findText('D').findRenderObject();
RenderBox boxG = tester.findText('G').findRenderObject();
RenderBox boxB = tester.findText('B').findRenderObject();
expect(boxA.size, equals(boxD.size));
expect(boxA.size, equals(boxG.size));
expect(boxA.size, equals(boxB.size));
});
});
test('Table widget - intrinsic sizing test', () {
testWidgets((WidgetTester tester) {
tester.pumpWidget(
new Table(
defaultColumnWidth: const IntrinsicColumnWidth(),
children: <TableRow>[
new TableRow(
children: <Widget>[
new Text('AAA'), new Text('B'), new Text('C')
]
),
new TableRow(
children: <Widget>[
new Text('D'), new Text('E'), new Text('FFFFFF')
]
),
new TableRow(
children: <Widget>[
new Text('G'), new Text('H'), new Text('III')
]
),
]
)
);
RenderBox boxA = tester.findText('AAA').findRenderObject();
RenderBox boxD = tester.findText('D').findRenderObject();
RenderBox boxG = tester.findText('G').findRenderObject();
RenderBox boxB = tester.findText('B').findRenderObject();
expect(boxA.size, equals(boxD.size));
expect(boxA.size, equals(boxG.size));
expect(boxA.size.width, greaterThan(boxB.size.width));
expect(boxA.size.height, equals(boxB.size.height));
});
});
test('Table widget - intrinsic sizing test, resizing', () {
testWidgets((WidgetTester tester) {
tester.pumpWidget(
new Table(
defaultColumnWidth: const IntrinsicColumnWidth(),
children: <TableRow>[
new TableRow(
children: <Widget>[
new Text('AAAAAA'), new Text('B'), new Text('C')
]
),
new TableRow(
children: <Widget>[
new Text('D'), new Text('EEE'), new Text('F')
]
),
new TableRow(
children: <Widget>[
new Text('G'), new Text('H'), new Text('III')
]
),
]
)
);
tester.pumpWidget(
new Table(
defaultColumnWidth: const IntrinsicColumnWidth(),
children: <TableRow>[
new TableRow(
children: <Widget>[
new Text('A'), new Text('B'), new Text('C')
]
),
new TableRow(
children: <Widget>[
new Text('D'), new Text('EEE'), new Text('F')
]
),
new TableRow(
children: <Widget>[
new Text('G'), new Text('H'), new Text('III')
]
),
]
)
);
RenderBox boxA = tester.findText('A').findRenderObject();
RenderBox boxD = tester.findText('D').findRenderObject();
RenderBox boxG = tester.findText('G').findRenderObject();
RenderBox boxB = tester.findText('B').findRenderObject();
expect(boxA.size, equals(boxD.size));
expect(boxA.size, equals(boxG.size));
expect(boxA.size.width, lessThan(boxB.size.width));
expect(boxA.size.height, equals(boxB.size.height));
});
});
test('Table widget - intrinsic sizing test, changing column widths', () {
testWidgets((WidgetTester tester) {
tester.pumpWidget(
new Table(
children: <TableRow>[
new TableRow(
children: <Widget>[
new Text('AAA'), new Text('B'), new Text('C')
]
),
new TableRow(
children: <Widget>[
new Text('D'), new Text('E'), new Text('FFFFFF')
]
),
new TableRow(
children: <Widget>[
new Text('G'), new Text('H'), new Text('III')
]
),
]
)
);
tester.pumpWidget(
new Table(
defaultColumnWidth: const IntrinsicColumnWidth(),
children: <TableRow>[
new TableRow(
children: <Widget>[
new Text('AAA'), new Text('B'), new Text('C')
]
),
new TableRow(
children: <Widget>[
new Text('D'), new Text('E'), new Text('FFFFFF')
]
),
new TableRow(
children: <Widget>[
new Text('G'), new Text('H'), new Text('III')
]
),
]
)
);
RenderBox boxA = tester.findText('AAA').findRenderObject();
RenderBox boxD = tester.findText('D').findRenderObject();
RenderBox boxG = tester.findText('G').findRenderObject();
RenderBox boxB = tester.findText('B').findRenderObject();
expect(boxA.size, equals(boxD.size));
expect(boxA.size, equals(boxG.size));
expect(boxA.size.width, greaterThan(boxB.size.width));
expect(boxA.size.height, equals(boxB.size.height));
});
});
test('Table widget - moving test', () {
testWidgets((WidgetTester tester) {
List<BuildContext> contexts = <BuildContext>[];
tester.pumpWidget(
new Table(
children: <TableRow>[
new TableRow(
key: new ValueKey<int>(1),
children: <Widget>[
new StatefulBuilder(
builder: (BuildContext context, StateSetter setState) {
contexts.add(context);
return new Text('A');
}
)
]
),
new TableRow(
children: <Widget>[
new Text('b')
]
),
]
)
);
tester.pumpWidget(
new Table(
children: <TableRow>[
new TableRow(
children: <Widget>[
new Text('b')
]
),
new TableRow(
key: new ValueKey<int>(1),
children: <Widget>[
new StatefulBuilder(
builder: (BuildContext context, StateSetter setState) {
contexts.add(context);
return new Text('A');
}
)
]
),
]
)
);
expect(contexts.length, equals(2));
expect(contexts[0], equals(contexts[1]));
});
});
// TODO(ianh): Test handling of TableCell object
}