mirror of
https://github.com/alibaba/flutter-go.git
synced 2025-07-08 10:15:53 +08:00
223 lines
6.5 KiB
Dart
223 lines
6.5 KiB
Dart
// Copyright 2017 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_web/material.dart';
|
|
import 'package:flutter_web_test/flutter_web_test.dart';
|
|
|
|
import 'data_table_test_utils.dart';
|
|
|
|
void main() {
|
|
testWidgets('DataTable control test', (WidgetTester tester) async {
|
|
final List<String> log = <String>[];
|
|
|
|
Widget buildTable({int sortColumnIndex, bool sortAscending = true}) {
|
|
return DataTable(
|
|
sortColumnIndex: sortColumnIndex,
|
|
sortAscending: sortAscending,
|
|
onSelectAll: (bool value) {
|
|
log.add('select-all: $value');
|
|
},
|
|
columns: <DataColumn>[
|
|
const DataColumn(
|
|
label: Text('Name'),
|
|
tooltip: 'Name',
|
|
),
|
|
DataColumn(
|
|
label: const Text('Calories'),
|
|
tooltip: 'Calories',
|
|
numeric: true,
|
|
onSort: (int columnIndex, bool ascending) {
|
|
log.add('column-sort: $columnIndex $ascending');
|
|
}),
|
|
],
|
|
rows: kDesserts.map<DataRow>((Dessert dessert) {
|
|
return DataRow(
|
|
key: Key(dessert.name),
|
|
onSelectChanged: (bool selected) {
|
|
log.add('row-selected: ${dessert.name}');
|
|
},
|
|
cells: <DataCell>[
|
|
DataCell(
|
|
Text(dessert.name),
|
|
),
|
|
DataCell(
|
|
Text('${dessert.calories}'),
|
|
showEditIcon: true,
|
|
onTap: () {
|
|
log.add('cell-tap: ${dessert.calories}');
|
|
},
|
|
),
|
|
],
|
|
);
|
|
}).toList(),
|
|
);
|
|
}
|
|
|
|
await tester.pumpWidget(MaterialApp(home: Material(child: buildTable())));
|
|
|
|
await tester.tap(find.byType(Checkbox).first);
|
|
|
|
expect(log, <String>['select-all: true']);
|
|
log.clear();
|
|
|
|
await tester.tap(find.text('Cupcake'));
|
|
|
|
expect(log, <String>['row-selected: Cupcake']);
|
|
log.clear();
|
|
|
|
await tester.tap(find.text('Calories'));
|
|
|
|
expect(log, <String>['column-sort: 1 true']);
|
|
log.clear();
|
|
|
|
await tester.pumpWidget(
|
|
MaterialApp(home: Material(child: buildTable(sortColumnIndex: 1))));
|
|
await tester.pumpAndSettle(const Duration(milliseconds: 200));
|
|
await tester.tap(find.text('Calories'));
|
|
|
|
expect(log, <String>['column-sort: 1 false']);
|
|
log.clear();
|
|
|
|
await tester.pumpWidget(MaterialApp(
|
|
home: Material(
|
|
child: buildTable(sortColumnIndex: 1, sortAscending: false))));
|
|
await tester.pumpAndSettle(const Duration(milliseconds: 200));
|
|
|
|
await tester.tap(find.text('375'));
|
|
|
|
expect(log, <String>['cell-tap: 375']);
|
|
log.clear();
|
|
|
|
await tester.tap(find.byType(Checkbox).last);
|
|
|
|
expect(log, <String>['row-selected: KitKat']);
|
|
log.clear();
|
|
});
|
|
|
|
testWidgets('DataTable overflow test - header', (WidgetTester tester) async {
|
|
await tester.pumpWidget(
|
|
MaterialApp(
|
|
home: Material(
|
|
child: DataTable(
|
|
columns: <DataColumn>[
|
|
DataColumn(
|
|
label: Text('X' * 2000),
|
|
),
|
|
],
|
|
rows: const <DataRow>[
|
|
DataRow(
|
|
cells: <DataCell>[
|
|
DataCell(
|
|
Text('X'),
|
|
),
|
|
],
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
);
|
|
expect(tester.renderObject<RenderBox>(find.byType(Text).first).size.width,
|
|
greaterThan(800.0));
|
|
expect(tester.renderObject<RenderBox>(find.byType(Row).first).size.width,
|
|
greaterThan(800.0));
|
|
expect(tester.takeException(),
|
|
isNull); // column overflows table, but text doesn't overflow cell
|
|
});
|
|
|
|
testWidgets('DataTable overflow test - header with spaces',
|
|
(WidgetTester tester) async {
|
|
await tester.pumpWidget(
|
|
MaterialApp(
|
|
home: Material(
|
|
child: DataTable(
|
|
columns: <DataColumn>[
|
|
DataColumn(
|
|
label: Text('X ' *
|
|
2000), // has soft wrap points, but they should be ignored
|
|
),
|
|
],
|
|
rows: const <DataRow>[
|
|
DataRow(
|
|
cells: <DataCell>[
|
|
DataCell(
|
|
Text('X'),
|
|
),
|
|
],
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
);
|
|
expect(tester.renderObject<RenderBox>(find.byType(Text).first).size.width,
|
|
greaterThan(800.0));
|
|
expect(tester.renderObject<RenderBox>(find.byType(Row).first).size.width,
|
|
greaterThan(800.0));
|
|
expect(tester.takeException(),
|
|
isNull); // column overflows table, but text doesn't overflow cell
|
|
}, skip: true); // https://github.com/flutter/flutter/issues/13512
|
|
|
|
testWidgets('DataTable overflow test', (WidgetTester tester) async {
|
|
await tester.pumpWidget(
|
|
MaterialApp(
|
|
home: Material(
|
|
child: DataTable(
|
|
columns: const <DataColumn>[
|
|
DataColumn(
|
|
label: Text('X'),
|
|
),
|
|
],
|
|
rows: <DataRow>[
|
|
DataRow(
|
|
cells: <DataCell>[
|
|
DataCell(
|
|
Text('X' * 2000),
|
|
),
|
|
],
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
);
|
|
expect(tester.renderObject<RenderBox>(find.byType(Text).first).size.width,
|
|
lessThan(800.0));
|
|
expect(tester.renderObject<RenderBox>(find.byType(Row).first).size.width,
|
|
greaterThan(800.0));
|
|
expect(tester.takeException(),
|
|
isNull); // cell overflows table, but text doesn't overflow cell
|
|
});
|
|
|
|
testWidgets('DataTable overflow test', (WidgetTester tester) async {
|
|
await tester.pumpWidget(
|
|
MaterialApp(
|
|
home: Material(
|
|
child: DataTable(
|
|
columns: const <DataColumn>[
|
|
DataColumn(
|
|
label: Text('X'),
|
|
),
|
|
],
|
|
rows: <DataRow>[
|
|
DataRow(
|
|
cells: <DataCell>[
|
|
DataCell(
|
|
Text('X ' * 2000), // wraps
|
|
),
|
|
],
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
);
|
|
expect(tester.renderObject<RenderBox>(find.byType(Text).first).size.width,
|
|
lessThan(800.0));
|
|
expect(tester.renderObject<RenderBox>(find.byType(Row).first).size.width,
|
|
lessThan(800.0));
|
|
expect(tester.takeException(), isNull);
|
|
});
|
|
}
|