blob: 2cb07611145f4f1da28eda3618986818fe7610c1 [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/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
testWidgets('OverflowBox control test', (WidgetTester tester) async {
final GlobalKey inner = GlobalKey();
await tester.pumpWidget(Align(
alignment: Alignment.bottomRight,
child: SizedBox(
width: 10.0,
height: 20.0,
child: OverflowBox(
minWidth: 0.0,
maxWidth: 100.0,
minHeight: 0.0,
maxHeight: 50.0,
child: Container(
key: inner,
),
),
),
));
final RenderBox box = inner.currentContext!.findRenderObject()! as RenderBox;
expect(box.localToGlobal(Offset.zero), equals(const Offset(745.0, 565.0)));
expect(box.size, equals(const Size(100.0, 50.0)));
});
testWidgets('OverflowBox implements debugFillProperties', (WidgetTester tester) async {
final DiagnosticPropertiesBuilder builder = DiagnosticPropertiesBuilder();
const OverflowBox(
minWidth: 1.0,
maxWidth: 2.0,
minHeight: 3.0,
maxHeight: 4.0,
).debugFillProperties(builder);
final List<String> description = builder.properties
.where((DiagnosticsNode n) => !n.isFiltered(DiagnosticLevel.info))
.map((DiagnosticsNode n) => n.toString()).toList();
expect(description, <String>[
'alignment: Alignment.center',
'minWidth: 1.0',
'maxWidth: 2.0',
'minHeight: 3.0',
'maxHeight: 4.0',
]);
});
testWidgets('SizedOverflowBox alignment', (WidgetTester tester) async {
final GlobalKey inner = GlobalKey();
await tester.pumpWidget(Directionality(
textDirection: TextDirection.rtl,
child: Center(
child: SizedOverflowBox(
size: const Size(100.0, 100.0),
alignment: Alignment.topRight,
child: SizedBox(height: 50.0, width: 50.0, key: inner),
),
),
));
final RenderBox box = inner.currentContext!.findRenderObject()! as RenderBox;
expect(box.size, equals(const Size(50.0, 50.0)));
expect(
box.localToGlobal(box.size.center(Offset.zero)),
equals(const Offset(
(800.0 - 100.0) / 2.0 + 100.0 - 50.0 / 2.0,
(600.0 - 100.0) / 2.0 + 0.0 + 50.0 / 2.0,
)),
);
});
testWidgets('SizedOverflowBox alignment (direction-sensitive)', (WidgetTester tester) async {
final GlobalKey inner = GlobalKey();
await tester.pumpWidget(Directionality(
textDirection: TextDirection.rtl,
child: Center(
child: SizedOverflowBox(
size: const Size(100.0, 100.0),
alignment: AlignmentDirectional.bottomStart,
child: SizedBox(height: 50.0, width: 50.0, key: inner),
),
),
));
final RenderBox box = inner.currentContext!.findRenderObject()! as RenderBox;
expect(box.size, equals(const Size(50.0, 50.0)));
expect(
box.localToGlobal(box.size.center(Offset.zero)),
equals(const Offset(
(800.0 - 100.0) / 2.0 + 100.0 - 50.0 / 2.0,
(600.0 - 100.0) / 2.0 + 100.0 - 50.0 / 2.0,
)),
);
});
}