overflow_box_test.dart 3.23 KB
Newer Older
Ian Hickson's avatar
Ian Hickson committed
1
// Copyright 2014 The Flutter Authors. All rights reserved.
2 3 4 5 6
// 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';
7
import 'package:flutter_test/flutter_test.dart';
8 9

void main() {
10
  testWidgets('OverflowBox control test', (WidgetTester tester) async {
11 12
    final GlobalKey inner = GlobalKey();
    await tester.pumpWidget(Align(
13
      alignment: Alignment.bottomRight,
14
      child: SizedBox(
15 16
        width: 10.0,
        height: 20.0,
17
        child: OverflowBox(
18 19 20 21
          minWidth: 0.0,
          maxWidth: 100.0,
          minHeight: 0.0,
          maxHeight: 50.0,
22
          child: Container(
23
            key: inner,
24 25 26
          ),
        ),
      ),
27
    ));
28
    final RenderBox box = inner.currentContext!.findRenderObject()! as RenderBox;
29
    expect(box.localToGlobal(Offset.zero), equals(const Offset(745.0, 565.0)));
30
    expect(box.size, equals(const Size(100.0, 50.0)));
31
  });
32

33
  testWidgets('OverflowBox implements debugFillProperties', (WidgetTester tester) async {
34
    final DiagnosticPropertiesBuilder builder = DiagnosticPropertiesBuilder();
35
    const OverflowBox(
36 37 38
      minWidth: 1.0,
      maxWidth: 2.0,
      minHeight: 3.0,
39
      maxHeight: 4.0,
40 41
    ).debugFillProperties(builder);
    final List<String> description = builder.properties
42
        .where((DiagnosticsNode n) => !n.isFiltered(DiagnosticLevel.info))
43
        .map((DiagnosticsNode n) => n.toString()).toList();
44
    expect(description, <String>[
45
      'alignment: Alignment.center',
46 47 48 49 50 51
      'minWidth: 1.0',
      'maxWidth: 2.0',
      'minHeight: 3.0',
      'maxHeight: 4.0',
    ]);
  });
52 53 54 55 56 57 58 59 60

  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,
61
          child: SizedBox(height: 50.0, width: 50.0, key: inner),
62 63 64
        ),
      ),
    ));
65
    final RenderBox box = inner.currentContext!.findRenderObject()! as RenderBox;
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
    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,
84
          child: SizedBox(height: 50.0, width: 50.0, key: inner),
85 86 87
        ),
      ),
    ));
88
    final RenderBox box = inner.currentContext!.findRenderObject()! as RenderBox;
89 90 91 92 93 94 95 96 97
    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,
      )),
    );
  });
98
}