// 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 }