blob: 3084acd4d466abd7ec7c7ffb2965dcf6f1fa86c1 [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() {
TestRenderingFlutterBinding.ensureInitialized();
test('RenderBaseline', () {
RenderBaseline parent;
RenderSizedBox child;
final RenderBox root = RenderPositionedBox(
alignment: Alignment.topLeft,
child: parent = RenderBaseline(
baseline: 0.0,
baselineType: TextBaseline.alphabetic,
child: child = RenderSizedBox(const Size(100.0, 100.0)),
),
);
final BoxParentData childParentData = child.parentData! as BoxParentData;
layout(root);
expect(childParentData.offset.dx, equals(0.0));
expect(childParentData.offset.dy, equals(-100.0));
expect(parent.size, equals(const Size(100.0, 0.0)));
parent.baseline = 25.0;
pumpFrame();
expect(childParentData.offset.dx, equals(0.0));
expect(childParentData.offset.dy, equals(-75.0));
expect(parent.size, equals(const Size(100.0, 25.0)));
parent.baseline = 90.0;
pumpFrame();
expect(childParentData.offset.dx, equals(0.0));
expect(childParentData.offset.dy, equals(-10.0));
expect(parent.size, equals(const Size(100.0, 90.0)));
parent.baseline = 100.0;
pumpFrame();
expect(childParentData.offset.dx, equals(0.0));
expect(childParentData.offset.dy, equals(0.0));
expect(parent.size, equals(const Size(100.0, 100.0)));
parent.baseline = 110.0;
pumpFrame();
expect(childParentData.offset.dx, equals(0.0));
expect(childParentData.offset.dy, equals(10.0));
expect(parent.size, equals(const Size(100.0, 110.0)));
});
test('RenderFlex and RenderIgnoreBaseline (control test -- with baseline)', () {
final RenderBox a, b;
final RenderBox root = RenderFlex(
crossAxisAlignment: CrossAxisAlignment.baseline,
textBaseline: TextBaseline.alphabetic,
textDirection: TextDirection.ltr,
children: <RenderBox>[
a = RenderParagraph(
const TextSpan(text: 'a', style: TextStyle(fontSize: 128.0, fontFamily: 'FlutterTest')), // places baseline at y=96
textDirection: TextDirection.ltr,
),
b = RenderParagraph(
const TextSpan(text: 'b', style: TextStyle(fontSize: 32.0, fontFamily: 'FlutterTest')), // 24 above baseline, 8 below baseline
textDirection: TextDirection.ltr,
),
],
);
layout(root);
final Offset aPos = a.localToGlobal(Offset.zero);
final Offset bPos = b.localToGlobal(Offset.zero);
expect(aPos.dy, 0.0);
expect(bPos.dy, 96.0 - 24.0);
});
test('RenderFlex and RenderIgnoreBaseline (with ignored baseline)', () {
final RenderBox a, b;
final RenderBox root = RenderFlex(
crossAxisAlignment: CrossAxisAlignment.baseline,
textBaseline: TextBaseline.alphabetic,
textDirection: TextDirection.ltr,
children: <RenderBox>[
RenderIgnoreBaseline(
child: a = RenderParagraph(
const TextSpan(text: 'a', style: TextStyle(fontSize: 128.0, fontFamily: 'FlutterTest')),
textDirection: TextDirection.ltr,
),
),
b = RenderParagraph(
const TextSpan(text: 'b', style: TextStyle(fontSize: 32.0, fontFamily: 'FlutterTest')),
textDirection: TextDirection.ltr,
),
],
);
layout(root);
final Offset aPos = a.localToGlobal(Offset.zero);
final Offset bPos = b.localToGlobal(Offset.zero);
expect(aPos.dy, 0.0);
expect(bPos.dy, 0.0);
});
}