| // 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/foundation.dart'; |
| import 'package:flutter/rendering.dart'; |
| import '../flutter_test_alternative.dart'; |
| import 'rendering_tester.dart'; |
| |
| void main() { |
| test('RenderAspectRatio: Intrinsic sizing 2.0', () { |
| final RenderAspectRatio box = RenderAspectRatio(aspectRatio: 2.0); |
| |
| expect(box.getMinIntrinsicWidth(200.0), 400.0); |
| expect(box.getMinIntrinsicWidth(400.0), 800.0); |
| |
| expect(box.getMaxIntrinsicWidth(200.0), 400.0); |
| expect(box.getMaxIntrinsicWidth(400.0), 800.0); |
| |
| expect(box.getMinIntrinsicHeight(200.0), 100.0); |
| expect(box.getMinIntrinsicHeight(400.0), 200.0); |
| |
| expect(box.getMaxIntrinsicHeight(200.0), 100.0); |
| expect(box.getMaxIntrinsicHeight(400.0), 200.0); |
| |
| expect(box.getMinIntrinsicWidth(double.infinity), 0.0); |
| expect(box.getMaxIntrinsicWidth(double.infinity), 0.0); |
| expect(box.getMinIntrinsicHeight(double.infinity), 0.0); |
| expect(box.getMaxIntrinsicHeight(double.infinity), 0.0); |
| }); |
| |
| test('RenderAspectRatio: Intrinsic sizing 0.5', () { |
| final RenderAspectRatio box = RenderAspectRatio(aspectRatio: 0.5); |
| |
| expect(box.getMinIntrinsicWidth(200.0), 100.0); |
| expect(box.getMinIntrinsicWidth(400.0), 200.0); |
| |
| expect(box.getMaxIntrinsicWidth(200.0), 100.0); |
| expect(box.getMaxIntrinsicWidth(400.0), 200.0); |
| |
| expect(box.getMinIntrinsicHeight(200.0), 400.0); |
| expect(box.getMinIntrinsicHeight(400.0), 800.0); |
| |
| expect(box.getMaxIntrinsicHeight(200.0), 400.0); |
| expect(box.getMaxIntrinsicHeight(400.0), 800.0); |
| |
| expect(box.getMinIntrinsicWidth(double.infinity), 0.0); |
| expect(box.getMaxIntrinsicWidth(double.infinity), 0.0); |
| expect(box.getMinIntrinsicHeight(double.infinity), 0.0); |
| expect(box.getMaxIntrinsicHeight(double.infinity), 0.0); |
| }); |
| |
| test('RenderAspectRatio: Intrinsic sizing 2.0', () { |
| final RenderAspectRatio box = RenderAspectRatio( |
| aspectRatio: 2.0, |
| child: RenderSizedBox(const Size(90.0, 70.0)), |
| ); |
| |
| expect(box.getMinIntrinsicWidth(200.0), 400.0); |
| expect(box.getMinIntrinsicWidth(400.0), 800.0); |
| |
| expect(box.getMaxIntrinsicWidth(200.0), 400.0); |
| expect(box.getMaxIntrinsicWidth(400.0), 800.0); |
| |
| expect(box.getMinIntrinsicHeight(200.0), 100.0); |
| expect(box.getMinIntrinsicHeight(400.0), 200.0); |
| |
| expect(box.getMaxIntrinsicHeight(200.0), 100.0); |
| expect(box.getMaxIntrinsicHeight(400.0), 200.0); |
| |
| expect(box.getMinIntrinsicWidth(double.infinity), 90.0); |
| expect(box.getMaxIntrinsicWidth(double.infinity), 90.0); |
| expect(box.getMinIntrinsicHeight(double.infinity), 70.0); |
| expect(box.getMaxIntrinsicHeight(double.infinity), 70.0); |
| }); |
| |
| test('RenderAspectRatio: Intrinsic sizing 0.5', () { |
| final RenderAspectRatio box = RenderAspectRatio( |
| aspectRatio: 0.5, |
| child: RenderSizedBox(const Size(90.0, 70.0)), |
| ); |
| |
| expect(box.getMinIntrinsicWidth(200.0), 100.0); |
| expect(box.getMinIntrinsicWidth(400.0), 200.0); |
| |
| expect(box.getMaxIntrinsicWidth(200.0), 100.0); |
| expect(box.getMaxIntrinsicWidth(400.0), 200.0); |
| |
| expect(box.getMinIntrinsicHeight(200.0), 400.0); |
| expect(box.getMinIntrinsicHeight(400.0), 800.0); |
| |
| expect(box.getMaxIntrinsicHeight(200.0), 400.0); |
| expect(box.getMaxIntrinsicHeight(400.0), 800.0); |
| |
| expect(box.getMinIntrinsicWidth(double.infinity), 90.0); |
| expect(box.getMaxIntrinsicWidth(double.infinity), 90.0); |
| expect(box.getMinIntrinsicHeight(double.infinity), 70.0); |
| expect(box.getMaxIntrinsicHeight(double.infinity), 70.0); |
| }); |
| |
| test('RenderAspectRatio: Unbounded', () { |
| final RenderBox box = RenderConstrainedOverflowBox( |
| maxWidth: double.infinity, |
| maxHeight: double.infinity, |
| child: RenderAspectRatio( |
| aspectRatio: 0.5, |
| child: RenderSizedBox(const Size(90.0, 70.0)), |
| ), |
| ); |
| |
| final List<String> errorMessages = <String>[]; |
| layout(box, onErrors: () { |
| errorMessages.addAll( |
| renderer.takeAllFlutterErrorDetails().map((FlutterErrorDetails details) => '${details.exceptionAsString()}'), |
| ); |
| }); |
| expect(errorMessages, hasLength(2)); |
| expect(errorMessages[0], contains('RenderAspectRatio has unbounded constraints.')); |
| // The second error message is a generic message generated by the Dart VM. Not worth testing. |
| }); |
| |
| test('RenderAspectRatio: Sizing', () { |
| RenderConstrainedOverflowBox outside; |
| RenderAspectRatio inside; |
| layout(outside = RenderConstrainedOverflowBox( |
| child: inside = RenderAspectRatio(aspectRatio: 1.0), |
| )); |
| pumpFrame(); |
| expect(inside.size, const Size(800.0, 600.0)); |
| outside.minWidth = 0.0; |
| outside.minHeight = 0.0; |
| |
| outside.maxWidth = 100.0; |
| outside.maxHeight = 90.0; |
| pumpFrame(); |
| expect(inside.size, const Size(90.0, 90.0)); |
| |
| outside.maxWidth = 90.0; |
| outside.maxHeight = 100.0; |
| pumpFrame(); |
| expect(inside.size, const Size(90.0, 90.0)); |
| |
| outside.maxWidth = double.infinity; |
| outside.maxHeight = 90.0; |
| pumpFrame(); |
| expect(inside.size, const Size(90.0, 90.0)); |
| |
| outside.maxWidth = 90.0; |
| outside.maxHeight = double.infinity; |
| pumpFrame(); |
| expect(inside.size, const Size(90.0, 90.0)); |
| |
| inside.aspectRatio = 2.0; |
| |
| outside.maxWidth = 100.0; |
| outside.maxHeight = 90.0; |
| pumpFrame(); |
| expect(inside.size, const Size(100.0, 50.0)); |
| |
| outside.maxWidth = 90.0; |
| outside.maxHeight = 100.0; |
| pumpFrame(); |
| expect(inside.size, const Size(90.0, 45.0)); |
| |
| outside.maxWidth = double.infinity; |
| outside.maxHeight = 90.0; |
| pumpFrame(); |
| expect(inside.size, const Size(180.0, 90.0)); |
| |
| outside.maxWidth = 90.0; |
| outside.maxHeight = double.infinity; |
| pumpFrame(); |
| expect(inside.size, const Size(90.0, 45.0)); |
| |
| outside.minWidth = 80.0; |
| outside.minHeight = 80.0; |
| |
| outside.maxWidth = 100.0; |
| outside.maxHeight = 90.0; |
| pumpFrame(); |
| expect(inside.size, const Size(100.0, 80.0)); |
| |
| outside.maxWidth = 90.0; |
| outside.maxHeight = 100.0; |
| pumpFrame(); |
| expect(inside.size, const Size(90.0, 80.0)); |
| |
| outside.maxWidth = double.infinity; |
| outside.maxHeight = 90.0; |
| pumpFrame(); |
| expect(inside.size, const Size(180.0, 90.0)); |
| |
| outside.maxWidth = 90.0; |
| outside.maxHeight = double.infinity; |
| pumpFrame(); |
| expect(inside.size, const Size(90.0, 80.0)); |
| }); |
| } |