aspect_ratio_test.dart 6.21 KB
Newer Older
1 2 3 4
// Copyright 2016 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.

Ian Hickson's avatar
Ian Hickson committed
5
import 'package:flutter/foundation.dart';
6
import 'package:flutter/rendering.dart';
7
import '../flutter_test_alternative.dart';
8
import 'rendering_tester.dart';
9 10

void main() {
Ian Hickson's avatar
Ian Hickson committed
11
  test('RenderAspectRatio: Intrinsic sizing 2.0', () {
12
    final RenderAspectRatio box = new RenderAspectRatio(aspectRatio: 2.0);
13

14 15 16 17 18 19 20 21 22 23 24 25
    expect(box.getMinIntrinsicWidth(200.0), 400.0);
    expect(box.getMinIntrinsicWidth(400.0), 800.0);

    expect(box.getMaxIntrinsicWidth(200.0), 400.0);
    expect(box.getMaxIntrinsicWidth(400.0), 800.0);

    expect(box.getMinIntrinsicHeight(200.0), 100.0);
    expect(box.getMinIntrinsicHeight(400.0), 200.0);

    expect(box.getMaxIntrinsicHeight(200.0), 100.0);
    expect(box.getMaxIntrinsicHeight(400.0), 200.0);

26 27 28 29
    expect(box.getMinIntrinsicWidth(double.infinity), 0.0);
    expect(box.getMaxIntrinsicWidth(double.infinity), 0.0);
    expect(box.getMinIntrinsicHeight(double.infinity), 0.0);
    expect(box.getMaxIntrinsicHeight(double.infinity), 0.0);
30 31
  });

Ian Hickson's avatar
Ian Hickson committed
32
  test('RenderAspectRatio: Intrinsic sizing 0.5', () {
33
    final RenderAspectRatio box = new RenderAspectRatio(aspectRatio: 0.5);
34 35 36 37 38 39 40 41 42 43 44 45 46

    expect(box.getMinIntrinsicWidth(200.0), 100.0);
    expect(box.getMinIntrinsicWidth(400.0), 200.0);

    expect(box.getMaxIntrinsicWidth(200.0), 100.0);
    expect(box.getMaxIntrinsicWidth(400.0), 200.0);

    expect(box.getMinIntrinsicHeight(200.0), 400.0);
    expect(box.getMinIntrinsicHeight(400.0), 800.0);

    expect(box.getMaxIntrinsicHeight(200.0), 400.0);
    expect(box.getMaxIntrinsicHeight(400.0), 800.0);

47 48 49 50
    expect(box.getMinIntrinsicWidth(double.infinity), 0.0);
    expect(box.getMaxIntrinsicWidth(double.infinity), 0.0);
    expect(box.getMinIntrinsicHeight(double.infinity), 0.0);
    expect(box.getMaxIntrinsicHeight(double.infinity), 0.0);
51 52
  });

Ian Hickson's avatar
Ian Hickson committed
53
  test('RenderAspectRatio: Intrinsic sizing 2.0', () {
54
    final RenderAspectRatio box = new RenderAspectRatio(
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
      aspectRatio: 2.0,
      child: new RenderSizedBox(const Size(90.0, 70.0))
    );

    expect(box.getMinIntrinsicWidth(200.0), 400.0);
    expect(box.getMinIntrinsicWidth(400.0), 800.0);

    expect(box.getMaxIntrinsicWidth(200.0), 400.0);
    expect(box.getMaxIntrinsicWidth(400.0), 800.0);

    expect(box.getMinIntrinsicHeight(200.0), 100.0);
    expect(box.getMinIntrinsicHeight(400.0), 200.0);

    expect(box.getMaxIntrinsicHeight(200.0), 100.0);
    expect(box.getMaxIntrinsicHeight(400.0), 200.0);

71 72 73 74
    expect(box.getMinIntrinsicWidth(double.infinity), 90.0);
    expect(box.getMaxIntrinsicWidth(double.infinity), 90.0);
    expect(box.getMinIntrinsicHeight(double.infinity), 70.0);
    expect(box.getMaxIntrinsicHeight(double.infinity), 70.0);
75 76
  });

Ian Hickson's avatar
Ian Hickson committed
77
  test('RenderAspectRatio: Intrinsic sizing 0.5', () {
78
    final RenderAspectRatio box = new RenderAspectRatio(
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
      aspectRatio: 0.5,
      child: new RenderSizedBox(const Size(90.0, 70.0))
    );

    expect(box.getMinIntrinsicWidth(200.0), 100.0);
    expect(box.getMinIntrinsicWidth(400.0), 200.0);

    expect(box.getMaxIntrinsicWidth(200.0), 100.0);
    expect(box.getMaxIntrinsicWidth(400.0), 200.0);

    expect(box.getMinIntrinsicHeight(200.0), 400.0);
    expect(box.getMinIntrinsicHeight(400.0), 800.0);

    expect(box.getMaxIntrinsicHeight(200.0), 400.0);
    expect(box.getMaxIntrinsicHeight(400.0), 800.0);

95 96 97 98
    expect(box.getMinIntrinsicWidth(double.infinity), 90.0);
    expect(box.getMaxIntrinsicWidth(double.infinity), 90.0);
    expect(box.getMinIntrinsicHeight(double.infinity), 70.0);
    expect(box.getMaxIntrinsicHeight(double.infinity), 70.0);
99
  });
Ian Hickson's avatar
Ian Hickson committed
100 101 102

  test('RenderAspectRatio: Unbounded', () {
    bool hadError = false;
103
    final FlutterExceptionHandler oldHandler = FlutterError.onError;
Ian Hickson's avatar
Ian Hickson committed
104 105 106
    FlutterError.onError = (FlutterErrorDetails details) {
      hadError = true;
    };
107
    final RenderBox box = new RenderConstrainedOverflowBox(
108 109
      maxWidth: double.infinity,
      maxHeight: double.infinity,
Ian Hickson's avatar
Ian Hickson committed
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
      child: new RenderAspectRatio(
        aspectRatio: 0.5,
        child: new RenderSizedBox(const Size(90.0, 70.0))
      ),
    );
    expect(hadError, false);
    layout(box);
    expect(hadError, true);
    FlutterError.onError = oldHandler;
  });

  test('RenderAspectRatio: Sizing', () {
    RenderConstrainedOverflowBox outside;
    RenderAspectRatio inside;
    layout(outside = new RenderConstrainedOverflowBox(
      child: inside = new RenderAspectRatio(aspectRatio: 1.0),
    ));
    pumpFrame();
    expect(inside.size, const Size(800.0, 600.0));
    outside.minWidth = 0.0;
    outside.minHeight = 0.0;

    outside.maxWidth = 100.0;
    outside.maxHeight = 90.0;
    pumpFrame();
    expect(inside.size, const Size(90.0, 90.0));

    outside.maxWidth = 90.0;
    outside.maxHeight = 100.0;
    pumpFrame();
    expect(inside.size, const Size(90.0, 90.0));

142
    outside.maxWidth = double.infinity;
Ian Hickson's avatar
Ian Hickson committed
143 144 145 146 147
    outside.maxHeight = 90.0;
    pumpFrame();
    expect(inside.size, const Size(90.0, 90.0));

    outside.maxWidth = 90.0;
148
    outside.maxHeight = double.infinity;
Ian Hickson's avatar
Ian Hickson committed
149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
    pumpFrame();
    expect(inside.size, const Size(90.0, 90.0));

    inside.aspectRatio = 2.0;

    outside.maxWidth = 100.0;
    outside.maxHeight = 90.0;
    pumpFrame();
    expect(inside.size, const Size(100.0, 50.0));

    outside.maxWidth = 90.0;
    outside.maxHeight = 100.0;
    pumpFrame();
    expect(inside.size, const Size(90.0, 45.0));

164
    outside.maxWidth = double.infinity;
Ian Hickson's avatar
Ian Hickson committed
165 166 167 168 169
    outside.maxHeight = 90.0;
    pumpFrame();
    expect(inside.size, const Size(180.0, 90.0));

    outside.maxWidth = 90.0;
170
    outside.maxHeight = double.infinity;
Ian Hickson's avatar
Ian Hickson committed
171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186
    pumpFrame();
    expect(inside.size, const Size(90.0, 45.0));

    outside.minWidth = 80.0;
    outside.minHeight = 80.0;

    outside.maxWidth = 100.0;
    outside.maxHeight = 90.0;
    pumpFrame();
    expect(inside.size, const Size(100.0, 80.0));

    outside.maxWidth = 90.0;
    outside.maxHeight = 100.0;
    pumpFrame();
    expect(inside.size, const Size(90.0, 80.0));

187
    outside.maxWidth = double.infinity;
Ian Hickson's avatar
Ian Hickson committed
188 189 190 191 192
    outside.maxHeight = 90.0;
    pumpFrame();
    expect(inside.size, const Size(180.0, 90.0));

    outside.maxWidth = 90.0;
193
    outside.maxHeight = double.infinity;
Ian Hickson's avatar
Ian Hickson committed
194 195 196
    pumpFrame();
    expect(inside.size, const Size(90.0, 80.0));
  });
197
}