blob: c3baf6675de260bbe969d13966462ff0f708ca66 [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/rendering.dart';
import 'package:flutter_test/flutter_test.dart';
import 'rendering_tester.dart';
void main() {
test('Wrap test; toStringDeep', () {
final RenderWrap renderWrap = RenderWrap();
expect(renderWrap, hasAGoodToStringDeep);
expect(
renderWrap.toStringDeep(minLevel: DiagnosticLevel.info),
equalsIgnoringHashCodes(
'RenderWrap#00000 NEEDS-LAYOUT NEEDS-PAINT DETACHED\n'
' parentData: MISSING\n'
' constraints: MISSING\n'
' size: MISSING\n'
' direction: horizontal\n'
' alignment: start\n'
' spacing: 0.0\n'
' runAlignment: start\n'
' runSpacing: 0.0\n'
' crossAxisAlignment: 0.0\n',
),
);
});
test('Compute intrinsic height test', () {
final List<RenderBox> children = <RenderBox>[
RenderConstrainedBox(
additionalConstraints: const BoxConstraints(
minWidth: 80,
minHeight: 80,
),
),
RenderConstrainedBox(
additionalConstraints: const BoxConstraints(
minWidth: 80,
minHeight: 80,
),
),
RenderConstrainedBox(
additionalConstraints: const BoxConstraints(
minWidth: 80,
minHeight: 80,
),
),
];
final RenderWrap renderWrap = RenderWrap();
children.forEach(renderWrap.add);
renderWrap.spacing = 5;
renderWrap.runSpacing = 5;
renderWrap.direction = Axis.horizontal;
expect(renderWrap.computeMaxIntrinsicHeight(245), 165);
expect(renderWrap.computeMaxIntrinsicHeight(250), 80);
expect(renderWrap.computeMaxIntrinsicHeight(80), 250);
expect(renderWrap.computeMaxIntrinsicHeight(79), 250);
expect(renderWrap.computeMinIntrinsicHeight(245), 165);
expect(renderWrap.computeMinIntrinsicHeight(250), 80);
expect(renderWrap.computeMinIntrinsicHeight(80), 250);
expect(renderWrap.computeMinIntrinsicHeight(79), 250);
});
test('Compute intrinsic height test for width-in-height-out children', () {
const double lineHeight = 15.0;
final RenderWrap renderWrap = RenderWrap();
renderWrap.add(
RenderParagraph(
const TextSpan(
text: 'A very very very very very very very very long text',
style: TextStyle(fontSize: lineHeight),
),
textDirection: TextDirection.ltr,
),
);
renderWrap.spacing = 0;
renderWrap.runSpacing = 0;
renderWrap.direction = Axis.horizontal;
expect(renderWrap.computeMaxIntrinsicHeight(double.infinity), lineHeight);
expect(renderWrap.computeMaxIntrinsicHeight(600), 2 * lineHeight);
expect(renderWrap.computeMaxIntrinsicHeight(300), 3 * lineHeight);
});
test('Compute intrinsic width test for height-in-width-out children', () {
const double lineHeight = 15.0;
final RenderWrap renderWrap = RenderWrap();
renderWrap.add(
// Rotates a width-in-height-out render object to make it height-in-width-out.
RenderRotatedBox(
quarterTurns: 1,
child: RenderParagraph(
const TextSpan(
text: 'A very very very very very very very very long text',
style: TextStyle(fontSize: lineHeight),
),
textDirection: TextDirection.ltr,
),
),
);
renderWrap.spacing = 0;
renderWrap.runSpacing = 0;
renderWrap.direction = Axis.vertical;
expect(renderWrap.computeMaxIntrinsicWidth(double.infinity), lineHeight);
expect(renderWrap.computeMaxIntrinsicWidth(600), 2 * lineHeight);
expect(renderWrap.computeMaxIntrinsicWidth(300), 3 * lineHeight);
});
test('Compute intrinsic width test', () {
final List<RenderBox> children = <RenderBox>[
RenderConstrainedBox(
additionalConstraints: const BoxConstraints(
minWidth: 80,
minHeight: 80,
),
),
RenderConstrainedBox(
additionalConstraints: const BoxConstraints(
minWidth: 80,
minHeight: 80,
),
),
RenderConstrainedBox(
additionalConstraints: const BoxConstraints(
minWidth: 80,
minHeight: 80,
),
),
];
final RenderWrap renderWrap = RenderWrap();
children.forEach(renderWrap.add);
renderWrap.spacing = 5;
renderWrap.runSpacing = 5;
renderWrap.direction = Axis.vertical;
expect(renderWrap.computeMaxIntrinsicWidth(245), 165);
expect(renderWrap.computeMaxIntrinsicWidth(250), 80);
expect(renderWrap.computeMaxIntrinsicWidth(80), 250);
expect(renderWrap.computeMaxIntrinsicWidth(79), 250);
expect(renderWrap.computeMinIntrinsicWidth(245), 165);
expect(renderWrap.computeMinIntrinsicWidth(250), 80);
expect(renderWrap.computeMinIntrinsicWidth(80), 250);
expect(renderWrap.computeMinIntrinsicWidth(79), 250);
});
test('Compute intrinsic height for only one run', () {
final RenderBox child = RenderConstrainedBox(
additionalConstraints: const BoxConstraints(
minWidth: 80,
minHeight: 80,
),
);
final RenderWrap renderWrap = RenderWrap();
renderWrap.add(child);
renderWrap.spacing = 5;
renderWrap.runSpacing = 5;
renderWrap.direction = Axis.horizontal;
expect(renderWrap.computeMaxIntrinsicHeight(100), 80);
expect(renderWrap.computeMaxIntrinsicHeight(79), 80);
expect(renderWrap.computeMaxIntrinsicHeight(80), 80);
expect(renderWrap.computeMinIntrinsicHeight(100), 80);
expect(renderWrap.computeMinIntrinsicHeight(79), 80);
expect(renderWrap.computeMinIntrinsicHeight(80), 80);
});
test('Compute intrinsic width for only one run', () {
final RenderBox child = RenderConstrainedBox(
additionalConstraints: const BoxConstraints(
minWidth: 80,
minHeight: 80,
),
);
final RenderWrap renderWrap = RenderWrap();
renderWrap.add(child);
renderWrap.spacing = 5;
renderWrap.runSpacing = 5;
renderWrap.direction = Axis.vertical;
expect(renderWrap.computeMaxIntrinsicWidth(100), 80);
expect(renderWrap.computeMaxIntrinsicWidth(79), 80);
expect(renderWrap.computeMaxIntrinsicWidth(80), 80);
expect(renderWrap.computeMinIntrinsicWidth(100), 80);
expect(renderWrap.computeMinIntrinsicWidth(79), 80);
expect(renderWrap.computeMinIntrinsicWidth(80), 80);
});
test('Wrap respects clipBehavior', () {
const BoxConstraints viewport = BoxConstraints(maxHeight: 100.0, maxWidth: 100.0);
final TestClipPaintingContext context = TestClipPaintingContext();
// By default, clipBehavior should be Clip.none
final RenderWrap defaultWrap = RenderWrap(textDirection: TextDirection.ltr, children: <RenderBox>[box200x200]);
layout(defaultWrap, constraints: viewport, phase: EnginePhase.composite, onErrors: expectOverflowedErrors);
context.paintChild(defaultWrap, Offset.zero);
expect(context.clipBehavior, equals(Clip.none));
for (final Clip clip in Clip.values) {
final RenderWrap wrap = RenderWrap(textDirection: TextDirection.ltr, children: <RenderBox>[box200x200], clipBehavior: clip);
layout(wrap, constraints: viewport, phase: EnginePhase.composite, onErrors: expectOverflowedErrors);
context.paintChild(wrap, Offset.zero);
expect(context.clipBehavior, equals(clip));
}
});
}