overflow_box_test.dart 3.18 KB
Newer Older
1 2 3 4 5 6 7 8 9
// Copyright 2015 The Chromium 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_test/flutter_test.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/widgets.dart';

void main() {
10
  testWidgets('OverflowBox control test', (WidgetTester tester) async {
11 12
    final GlobalKey inner = GlobalKey();
    await tester.pumpWidget(Align(
13
      alignment: const Alignment(1.0, 1.0),
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();
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: 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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97

  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: Container(height: 50.0, width: 50.0, key: inner),
        ),
      ),
    ));
    final RenderBox box = inner.currentContext.findRenderObject();
    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: Container(height: 50.0, width: 50.0, key: inner),
        ),
      ),
    ));
    final RenderBox box = inner.currentContext.findRenderObject();
    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
}