// 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('Can hit test flex children of stacks', () { testWidgets((WidgetTester tester) { bool didReceiveTap = false; tester.pumpWidget( new Container( decoration: const BoxDecoration( backgroundColor: const Color(0xFF00FF00) ), child: new Stack( children: <Widget>[ new Positioned( top: 10.0, left: 10.0, child: new Column( children: <Widget>[ new GestureDetector( onTap: () { didReceiveTap = true; }, child: new Container( decoration: const BoxDecoration( backgroundColor: const Color(0xFF0000FF) ), width: 100.0, height: 100.0, child: new Center( child: new Text('X') ) ) ) ] ) ) ] ) ) ); tester.tap(tester.findText('X')); expect(didReceiveTap, isTrue); }); }); test('Row, Column and FlexJustifyContent.collapse', () { final Key flexKey = new Key('flexKey'); // Row without justifyContent: FlexJustifyContent.collapse testWidgets((WidgetTester tester) { tester.pumpWidget(new Center( child: new Row( children: <Widget>[ new Container(width: 10.0, height: 100.0), new Container(width: 30.0, height: 100.0) ], key: flexKey ) )); RenderBox renderBox = tester.findElementByKey(flexKey).renderObject; expect(renderBox.size.width, equals(800.0)); expect(renderBox.size.height, equals(100.0)); // Row with justifyContent: FlexJustifyContent.collapse tester.pumpWidget(new Center( child: new Row( children: <Widget>[ new Container(width: 10.0, height: 100.0), new Container(width: 30.0, height: 100.0) ], key: flexKey, justifyContent: FlexJustifyContent.collapse ) )); renderBox = tester.findElementByKey(flexKey).renderObject; expect(renderBox.size.width, equals(40.0)); expect(renderBox.size.height, equals(100.0)); }); // Column without justifyContent: FlexJustifyContent.collapse testWidgets((WidgetTester tester) { tester.pumpWidget(new Center( child: new Column( children: <Widget>[ new Container(width: 100.0, height: 100.0), new Container(width: 100.0, height: 150.0) ], key: flexKey ) )); RenderBox renderBox = tester.findElementByKey(flexKey).renderObject; expect(renderBox.size.width, equals(100.0)); expect(renderBox.size.height, equals(600.0)); // Column with justifyContent: FlexJustifyContent.collapse tester.pumpWidget(new Center( child: new Column( children: <Widget>[ new Container(width: 100.0, height: 100.0), new Container(width: 100.0, height: 150.0) ], key: flexKey, justifyContent: FlexJustifyContent.collapse ) )); renderBox = tester.findElementByKey(flexKey).renderObject; expect(renderBox.size.width, equals(100.0)); expect(renderBox.size.height, equals(250.0)); }); }); test('Can layout at zero size', () { final Key childKey = new Key('childKey'); testWidgets((WidgetTester tester) { tester.pumpWidget(new Center( child: new Container( width: 0.0, height: 0.0, child: new Column( children: <Widget>[ new Container( key: childKey, width: 100.0, height: 100.0 ) ], justifyContent: FlexJustifyContent.collapse ) ) )); RenderBox renderBox = tester.findElementByKey(childKey).renderObject; expect(renderBox.size.width, equals(0.0)); expect(renderBox.size.height, equals(100.0)); tester.pumpWidget(new Center( child: new Container( width: 0.0, height: 0.0, child: new Row( children: <Widget>[ new Container( key: childKey, width: 100.0, height: 100.0 ) ], justifyContent: FlexJustifyContent.collapse ) ) )); renderBox = tester.findElementByKey(childKey).renderObject; expect(renderBox.size.width, equals(100.0)); expect(renderBox.size.height, equals(0.0)); }); }); }