blob: 601d153eba78ba3cec6dfc04d4805537d68015dd [file] [log] [blame]
// Copyright 2014 The Flutter 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/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter_test/flutter_test.dart';
import 'rendering_tester.dart';
void main() {
test('LimitedBox: parent max size is unconstrained', () {
final RenderBox child = RenderConstrainedBox(
additionalConstraints: const BoxConstraints.tightFor(width: 300.0, height: 400.0)
);
final RenderBox parent = RenderConstrainedOverflowBox(
minWidth: 0.0,
maxWidth: double.infinity,
minHeight: 0.0,
maxHeight: double.infinity,
child: RenderLimitedBox(
maxWidth: 100.0,
maxHeight: 200.0,
child: child,
),
);
layout(parent);
expect(child.size.width, 100.0);
expect(child.size.height, 200.0);
expect(parent, hasAGoodToStringDeep);
expect(
parent.toStringDeep(minLevel: DiagnosticLevel.info),
equalsIgnoringHashCodes(
'RenderConstrainedOverflowBox#00000 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE\n'
' │ parentData: <none>\n'
' │ constraints: BoxConstraints(w=800.0, h=600.0)\n'
' │ size: Size(800.0, 600.0)\n'
' │ alignment: center\n'
' │ minWidth: 0.0\n'
' │ maxWidth: Infinity\n'
' │ minHeight: 0.0\n'
' │ maxHeight: Infinity\n'
' │\n'
' └─child: RenderLimitedBox#00000 relayoutBoundary=up1 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE\n'
' │ parentData: offset=Offset(350.0, 200.0) (can use size)\n'
' │ constraints: BoxConstraints(unconstrained)\n'
' │ size: Size(100.0, 200.0)\n'
' │ maxWidth: 100.0\n'
' │ maxHeight: 200.0\n'
' │\n'
' └─child: RenderConstrainedBox#00000 relayoutBoundary=up2 NEEDS-PAINT\n'
' parentData: <none> (can use size)\n'
' constraints: BoxConstraints(0.0<=w<=100.0, 0.0<=h<=200.0)\n'
' size: Size(100.0, 200.0)\n'
' additionalConstraints: BoxConstraints(w=300.0, h=400.0)\n',
),
);
});
test('LimitedBox: parent maxWidth is unconstrained', () {
final RenderBox child = RenderConstrainedBox(
additionalConstraints: const BoxConstraints.tightFor(width: 300.0, height: 400.0)
);
final RenderBox parent = RenderConstrainedOverflowBox(
minWidth: 0.0,
maxWidth: double.infinity,
minHeight: 500.0,
maxHeight: 500.0,
child: RenderLimitedBox(
maxWidth: 100.0,
maxHeight: 200.0,
child: child,
),
);
layout(parent);
expect(child.size.width, 100.0);
expect(child.size.height, 500.0);
});
test('LimitedBox: parent maxHeight is unconstrained', () {
final RenderBox child = RenderConstrainedBox(
additionalConstraints: const BoxConstraints.tightFor(width: 300.0, height: 400.0)
);
final RenderBox parent = RenderConstrainedOverflowBox(
minWidth: 500.0,
maxWidth: 500.0,
minHeight: 0.0,
maxHeight: double.infinity,
child: RenderLimitedBox(
maxWidth: 100.0,
maxHeight: 200.0,
child: child,
),
);
layout(parent);
expect(child.size.width, 500.0);
expect(child.size.height, 200.0);
});
test('LimitedBox: no child', () {
RenderBox box;
final RenderBox parent = RenderConstrainedOverflowBox(
minWidth: 10.0,
maxWidth: 500.0,
minHeight: 0.0,
maxHeight: double.infinity,
child: box = RenderLimitedBox(
maxWidth: 100.0,
maxHeight: 200.0,
),
);
layout(parent);
expect(box.size, const Size(10.0, 0.0));
expect(parent, hasAGoodToStringDeep);
expect(
parent.toStringDeep(minLevel: DiagnosticLevel.info),
equalsIgnoringHashCodes(
'RenderConstrainedOverflowBox#00000 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE\n'
' │ parentData: <none>\n'
' │ constraints: BoxConstraints(w=800.0, h=600.0)\n'
' │ size: Size(800.0, 600.0)\n'
' │ alignment: center\n'
' │ minWidth: 10.0\n'
' │ maxWidth: 500.0\n'
' │ minHeight: 0.0\n'
' │ maxHeight: Infinity\n'
' │\n'
' └─child: RenderLimitedBox#00000 relayoutBoundary=up1 NEEDS-PAINT\n'
' parentData: offset=Offset(395.0, 300.0) (can use size)\n'
' constraints: BoxConstraints(10.0<=w<=500.0, 0.0<=h<=Infinity)\n'
' size: Size(10.0, 0.0)\n'
' maxWidth: 100.0\n'
' maxHeight: 200.0\n',
),
);
});
test('LimitedBox: no child use parent', () {
RenderBox box;
final RenderBox parent = RenderConstrainedOverflowBox(
minWidth: 10.0,
child: box = RenderLimitedBox(
maxWidth: 100.0,
maxHeight: 200.0,
),
);
layout(parent);
expect(box.size, const Size(10.0, 600.0));
expect(parent, hasAGoodToStringDeep);
expect(
parent.toStringDeep(minLevel: DiagnosticLevel.info),
equalsIgnoringHashCodes(
'RenderConstrainedOverflowBox#00000 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE\n'
' │ parentData: <none>\n'
' │ constraints: BoxConstraints(w=800.0, h=600.0)\n'
' │ size: Size(800.0, 600.0)\n'
' │ alignment: center\n'
' │ minWidth: 10.0\n'
' │ maxWidth: use parent maxWidth constraint\n'
' │ minHeight: use parent minHeight constraint\n'
' │ maxHeight: use parent maxHeight constraint\n'
' │\n'
' └─child: RenderLimitedBox#00000 relayoutBoundary=up1 NEEDS-PAINT\n'
' parentData: offset=Offset(395.0, 0.0) (can use size)\n'
' constraints: BoxConstraints(10.0<=w<=800.0, h=600.0)\n'
' size: Size(10.0, 600.0)\n'
' maxWidth: 100.0\n'
' maxHeight: 200.0\n',
),
);
});
}