intrinsic_width_test.dart 21.3 KB
Newer Older
Ian Hickson's avatar
Ian Hickson committed
1
// Copyright 2014 The Flutter Authors. All rights reserved.
Ian Hickson's avatar
Ian Hickson committed
2 3 4
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

5
import 'package:flutter/rendering.dart';
6
import 'package:flutter_test/flutter_test.dart';
Hixie's avatar
Hixie committed
7

8
import 'rendering_tester.dart';
Hixie's avatar
Hixie committed
9

10
// before using this, consider using RenderSizedBox from rendering_tester.dart
Hixie's avatar
Hixie committed
11 12 13 14 15
class RenderTestBox extends RenderBox {
  RenderTestBox(this._intrinsicDimensions);

  final BoxConstraints _intrinsicDimensions;

16
  @override
17
  double computeMinIntrinsicWidth(double height) {
18
    return _intrinsicDimensions.minWidth;
Hixie's avatar
Hixie committed
19 20
  }

21
  @override
22
  double computeMaxIntrinsicWidth(double height) {
23
    return _intrinsicDimensions.maxWidth;
Hixie's avatar
Hixie committed
24 25
  }

26
  @override
27
  double computeMinIntrinsicHeight(double width) {
28
    return _intrinsicDimensions.minHeight;
Hixie's avatar
Hixie committed
29 30
  }

31
  @override
32
  double computeMaxIntrinsicHeight(double width) {
33
    return _intrinsicDimensions.maxHeight;
Hixie's avatar
Hixie committed
34 35
  }

36
  @override
Hixie's avatar
Hixie committed
37
  bool get sizedByParent => true;
38 39

  @override
Hixie's avatar
Hixie committed
40
  void performResize() {
41 42 43 44
    size = constraints.constrain(Size(
      _intrinsicDimensions.minWidth + (_intrinsicDimensions.maxWidth - _intrinsicDimensions.minWidth) / 2.0,
      _intrinsicDimensions.minHeight + (_intrinsicDimensions.maxHeight - _intrinsicDimensions.minHeight) / 2.0,
    ));
Hixie's avatar
Hixie committed
45 46 47 48
  }
}

void main() {
49 50
  TestRenderingFlutterBinding.ensureInitialized();

Hixie's avatar
Hixie committed
51
  test('Shrink-wrapping width', () {
52 53 54 55 56 57
    final RenderBox child = RenderTestBox(const BoxConstraints(
      minWidth: 10.0,
      maxWidth: 100.0,
      minHeight: 20.0,
      maxHeight: 200.0,
    ));
58
    final RenderBox parent = RenderIntrinsicWidth(child: child);
59 60
    layout(
      parent,
61
      constraints: const BoxConstraints(
62 63 64
        minWidth: 5.0,
        minHeight: 8.0,
        maxWidth: 500.0,
65 66
        maxHeight: 800.0,
      ),
67
    );
Hixie's avatar
Hixie committed
68 69
    expect(parent.size.width, equals(100.0));
    expect(parent.size.height, equals(110.0));
70 71
    expect(child.size.width, equals(100));
    expect(child.size.height, equals(110));
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87

    expect(parent.getMinIntrinsicWidth(0.0), equals(100.0));
    expect(parent.getMaxIntrinsicWidth(0.0), equals(100.0));
    expect(parent.getMinIntrinsicHeight(0.0), equals(20.0));
    expect(parent.getMaxIntrinsicHeight(0.0), equals(200.0));

    expect(parent.getMinIntrinsicWidth(10.0), equals(100.0));
    expect(parent.getMaxIntrinsicWidth(10.0), equals(100.0));
    expect(parent.getMinIntrinsicHeight(10.0), equals(20.0));
    expect(parent.getMaxIntrinsicHeight(10.0), equals(200.0));

    expect(parent.getMinIntrinsicWidth(80.0), equals(100.0));
    expect(parent.getMaxIntrinsicWidth(80.0), equals(100.0));
    expect(parent.getMinIntrinsicHeight(80.0), equals(20.0));
    expect(parent.getMaxIntrinsicHeight(80.0), equals(200.0));

88 89 90 91
    expect(parent.getMinIntrinsicWidth(double.infinity), equals(100.0));
    expect(parent.getMaxIntrinsicWidth(double.infinity), equals(100.0));
    expect(parent.getMinIntrinsicHeight(double.infinity), equals(20.0));
    expect(parent.getMaxIntrinsicHeight(double.infinity), equals(200.0));
Hixie's avatar
Hixie committed
92 93
  });

Ian Hickson's avatar
Ian Hickson committed
94
  test('IntrinsicWidth without a child', () {
95
    final RenderBox parent = RenderIntrinsicWidth();
96 97
    layout(
      parent,
Ian Hickson's avatar
Ian Hickson committed
98 99 100 101
      constraints: const BoxConstraints(
        minWidth: 5.0,
        minHeight: 8.0,
        maxWidth: 500.0,
102 103
        maxHeight: 800.0,
      ),
Ian Hickson's avatar
Ian Hickson committed
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
    );
    expect(parent.size.width, equals(5.0));
    expect(parent.size.height, equals(8.0));

    expect(parent.getMinIntrinsicWidth(0.0), equals(0.0));
    expect(parent.getMaxIntrinsicWidth(0.0), equals(0.0));
    expect(parent.getMinIntrinsicHeight(0.0), equals(0.0));
    expect(parent.getMaxIntrinsicHeight(0.0), equals(0.0));

    expect(parent.getMinIntrinsicWidth(10.0), equals(0.0));
    expect(parent.getMaxIntrinsicWidth(10.0), equals(0.0));
    expect(parent.getMinIntrinsicHeight(10.0), equals(0.0));
    expect(parent.getMaxIntrinsicHeight(10.0), equals(0.0));

    expect(parent.getMinIntrinsicWidth(80.0), equals(0.0));
    expect(parent.getMaxIntrinsicWidth(80.0), equals(0.0));
    expect(parent.getMinIntrinsicHeight(80.0), equals(0.0));
    expect(parent.getMaxIntrinsicHeight(80.0), equals(0.0));

123 124 125 126
    expect(parent.getMinIntrinsicWidth(double.infinity), equals(0.0));
    expect(parent.getMaxIntrinsicWidth(double.infinity), equals(0.0));
    expect(parent.getMinIntrinsicHeight(double.infinity), equals(0.0));
    expect(parent.getMaxIntrinsicHeight(double.infinity), equals(0.0));
Ian Hickson's avatar
Ian Hickson committed
127 128
  });

129
  test('Shrink-wrapping width (stepped width)', () {
130 131 132 133 134 135
    final RenderBox child = RenderTestBox(const BoxConstraints(
      minWidth: 10.0,
      maxWidth: 100.0,
      minHeight: 20.0,
      maxHeight: 200.0,
    ));
136
    final RenderBox parent = RenderIntrinsicWidth(child: child, stepWidth: 47.0);
137 138
    layout(
      parent,
139
      constraints: const BoxConstraints(
140 141 142
        minWidth: 5.0,
        minHeight: 8.0,
        maxWidth: 500.0,
143 144
        maxHeight: 800.0,
      ),
145 146 147
    );
    expect(parent.size.width, equals(3.0 * 47.0));
    expect(parent.size.height, equals(110.0));
148 149
    expect(child.size.width, equals(3 * 47));
    expect(child.size.height, equals(110));
150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165

    expect(parent.getMinIntrinsicWidth(0.0), equals(3.0 * 47.0));
    expect(parent.getMaxIntrinsicWidth(0.0), equals(3.0 * 47.0));
    expect(parent.getMinIntrinsicHeight(0.0), equals(20.0));
    expect(parent.getMaxIntrinsicHeight(0.0), equals(200.0));

    expect(parent.getMinIntrinsicWidth(10.0), equals(3.0 * 47.0));
    expect(parent.getMaxIntrinsicWidth(10.0), equals(3.0 * 47.0));
    expect(parent.getMinIntrinsicHeight(10.0), equals(20.0));
    expect(parent.getMaxIntrinsicHeight(10.0), equals(200.0));

    expect(parent.getMinIntrinsicWidth(80.0), equals(3.0 * 47.0));
    expect(parent.getMaxIntrinsicWidth(80.0), equals(3.0 * 47.0));
    expect(parent.getMinIntrinsicHeight(80.0), equals(20.0));
    expect(parent.getMaxIntrinsicHeight(80.0), equals(200.0));

166 167 168 169
    expect(parent.getMinIntrinsicWidth(double.infinity), equals(3.0 * 47.0));
    expect(parent.getMaxIntrinsicWidth(double.infinity), equals(3.0 * 47.0));
    expect(parent.getMinIntrinsicHeight(double.infinity), equals(20.0));
    expect(parent.getMaxIntrinsicHeight(double.infinity), equals(200.0));
170 171 172
  });

  test('Shrink-wrapping width (stepped height)', () {
173 174 175 176 177 178
    final RenderBox child = RenderTestBox(const BoxConstraints(
      minWidth: 10.0,
      maxWidth: 100.0,
      minHeight: 20.0,
      maxHeight: 200.0,
    ));
179
    final RenderBox parent = RenderIntrinsicWidth(child: child, stepHeight: 47.0);
180 181
    layout(
      parent,
182
      constraints: const BoxConstraints(
183 184 185
        minWidth: 5.0,
        minHeight: 8.0,
        maxWidth: 500.0,
186 187
        maxHeight: 800.0,
      ),
188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206
    );
    expect(parent.size.width, equals(100.0));
    expect(parent.size.height, equals(235.0));

    expect(parent.getMinIntrinsicWidth(0.0), equals(100.0));
    expect(parent.getMaxIntrinsicWidth(0.0), equals(100.0));
    expect(parent.getMinIntrinsicHeight(0.0), equals(1.0 * 47.0));
    expect(parent.getMaxIntrinsicHeight(0.0), equals(5.0 * 47.0));

    expect(parent.getMinIntrinsicWidth(10.0), equals(100.0));
    expect(parent.getMaxIntrinsicWidth(10.0), equals(100.0));
    expect(parent.getMinIntrinsicHeight(10.0), equals(1.0 * 47.0));
    expect(parent.getMaxIntrinsicHeight(10.0), equals(5.0 * 47.0));

    expect(parent.getMinIntrinsicWidth(80.0), equals(100.0));
    expect(parent.getMaxIntrinsicWidth(80.0), equals(100.0));
    expect(parent.getMinIntrinsicHeight(80.0), equals(1.0 * 47.0));
    expect(parent.getMaxIntrinsicHeight(80.0), equals(5.0 * 47.0));

207 208 209 210
    expect(parent.getMinIntrinsicWidth(double.infinity), equals(100.0));
    expect(parent.getMaxIntrinsicWidth(double.infinity), equals(100.0));
    expect(parent.getMinIntrinsicHeight(double.infinity), equals(1.0 * 47.0));
    expect(parent.getMaxIntrinsicHeight(double.infinity), equals(5.0 * 47.0));
211 212 213
  });

  test('Shrink-wrapping width (stepped everything)', () {
214 215 216 217 218 219
    final RenderBox child = RenderTestBox(const BoxConstraints(
      minWidth: 10.0,
      maxWidth: 100.0,
      minHeight: 20.0,
      maxHeight: 200.0,
    ));
220
    final RenderBox parent = RenderIntrinsicWidth(child: child, stepHeight: 47.0, stepWidth: 37.0);
221 222
    layout(
      parent,
223
      constraints: const BoxConstraints(
224 225 226
        minWidth: 5.0,
        minHeight: 8.0,
        maxWidth: 500.0,
227 228
        maxHeight: 800.0,
      ),
229 230 231
    );
    expect(parent.size.width, equals(3.0 * 37.0));
    expect(parent.size.height, equals(235.0));
Hixie's avatar
Hixie committed
232

233 234 235 236 237 238 239 240 241 242 243 244 245 246 247
    expect(parent.getMinIntrinsicWidth(0.0), equals(3.0 * 37.0));
    expect(parent.getMaxIntrinsicWidth(0.0), equals(3.0 * 37.0));
    expect(parent.getMinIntrinsicHeight(0.0), equals(1.0 * 47.0));
    expect(parent.getMaxIntrinsicHeight(0.0), equals(5.0 * 47.0));

    expect(parent.getMinIntrinsicWidth(10.0), equals(3.0 * 37.0));
    expect(parent.getMaxIntrinsicWidth(10.0), equals(3.0 * 37.0));
    expect(parent.getMinIntrinsicHeight(10.0), equals(1.0 * 47.0));
    expect(parent.getMaxIntrinsicHeight(10.0), equals(5.0 * 47.0));

    expect(parent.getMinIntrinsicWidth(80.0), equals(3.0 * 37.0));
    expect(parent.getMaxIntrinsicWidth(80.0), equals(3.0 * 37.0));
    expect(parent.getMinIntrinsicHeight(80.0), equals(1.0 * 47.0));
    expect(parent.getMaxIntrinsicHeight(80.0), equals(5.0 * 47.0));

248 249 250 251
    expect(parent.getMinIntrinsicWidth(double.infinity), equals(3.0 * 37.0));
    expect(parent.getMaxIntrinsicWidth(double.infinity), equals(3.0 * 37.0));
    expect(parent.getMinIntrinsicHeight(double.infinity), equals(1.0 * 47.0));
    expect(parent.getMaxIntrinsicHeight(double.infinity), equals(5.0 * 47.0));
252 253
  });

254
  test('RenderIntrinsicWidth when parent is given loose constraints smaller than intrinsic width of child', () {
255 256 257 258 259 260
    final RenderBox child = RenderTestBox(const BoxConstraints(
      minWidth: 10.0,
      maxWidth: 100.0,
      minHeight: 20.0,
      maxHeight: 200.0,
    ));
261
    final RenderBox parent = RenderIntrinsicWidth(child: child);
262 263
    layout(
      parent,
264 265 266 267 268 269 270 271 272 273 274 275 276 277
      constraints: const BoxConstraints(
        minWidth: 50.0,
        minHeight: 8.0,
        maxWidth: 70.0,
        maxHeight: 800.0,
      ),
    );
    expect(parent.size.width, equals(70));
    expect(parent.size.height, equals(110));
    expect(child.size.width, equals(70));
    expect(child.size.height, equals(110));
  });

  test('RenderIntrinsicWidth when parent is given tight constraints larger than intrinsic width of child', () {
278 279
    final RenderBox child =
        RenderTestBox(const BoxConstraints(minWidth: 10.0, maxWidth: 100.0, minHeight: 20.0, maxHeight: 200.0));
280
    final RenderBox parent = RenderIntrinsicWidth(child: child);
281 282
    layout(
      parent,
283 284 285 286 287 288 289 290 291 292 293 294 295 296
      constraints: const BoxConstraints(
        minWidth: 500.0,
        minHeight: 8.0,
        maxWidth: 500.0,
        maxHeight: 800.0,
      ),
    );
    expect(parent.size.width, equals(500));
    expect(parent.size.height, equals(110));
    expect(child.size.width, equals(500));
    expect(child.size.height, equals(110));
  });

  test('RenderIntrinsicWidth when parent is given tight constraints smaller than intrinsic width of child', () {
297 298 299 300 301 302
    final RenderBox child = RenderTestBox(const BoxConstraints(
      minWidth: 10.0,
      maxWidth: 100.0,
      minHeight: 20.0,
      maxHeight: 200.0,
    ));
303
    final RenderBox parent = RenderIntrinsicWidth(child: child);
304 305
    layout(
      parent,
306 307 308 309 310 311 312 313 314 315 316 317 318
      constraints: const BoxConstraints(
        minWidth: 50.0,
        minHeight: 8.0,
        maxWidth: 50.0,
        maxHeight: 800.0,
      ),
    );
    expect(parent.size.width, equals(50));
    expect(parent.size.height, equals(110));
    expect(child.size.width, equals(50));
    expect(child.size.height, equals(110));
  });

319
  test('Shrink-wrapping height', () {
320 321 322 323 324 325
    final RenderBox child = RenderTestBox(const BoxConstraints(
      minWidth: 10.0,
      maxWidth: 100.0,
      minHeight: 20.0,
      maxHeight: 200.0,
    ));
326
    final RenderBox parent = RenderIntrinsicHeight(child: child);
327 328
    layout(
      parent,
329
      constraints: const BoxConstraints(
330 331 332
        minWidth: 5.0,
        minHeight: 8.0,
        maxWidth: 500.0,
333 334
        maxHeight: 800.0,
      ),
335
    );
Hixie's avatar
Hixie committed
336 337
    expect(parent.size.width, equals(55.0));
    expect(parent.size.height, equals(200.0));
338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353

    expect(parent.getMinIntrinsicWidth(0.0), equals(10.0));
    expect(parent.getMaxIntrinsicWidth(0.0), equals(100.0));
    expect(parent.getMinIntrinsicHeight(0.0), equals(200.0));
    expect(parent.getMaxIntrinsicHeight(0.0), equals(200.0));

    expect(parent.getMinIntrinsicWidth(10.0), equals(10.0));
    expect(parent.getMaxIntrinsicWidth(10.0), equals(100.0));
    expect(parent.getMinIntrinsicHeight(10.0), equals(200.0));
    expect(parent.getMaxIntrinsicHeight(10.0), equals(200.0));

    expect(parent.getMinIntrinsicWidth(80.0), equals(10.0));
    expect(parent.getMaxIntrinsicWidth(80.0), equals(100.0));
    expect(parent.getMinIntrinsicHeight(80.0), equals(200.0));
    expect(parent.getMaxIntrinsicHeight(80.0), equals(200.0));

354 355 356 357
    expect(parent.getMinIntrinsicWidth(double.infinity), equals(10.0));
    expect(parent.getMaxIntrinsicWidth(double.infinity), equals(100.0));
    expect(parent.getMinIntrinsicHeight(double.infinity), equals(200.0));
    expect(parent.getMaxIntrinsicHeight(double.infinity), equals(200.0));
358 359
  });

Ian Hickson's avatar
Ian Hickson committed
360
  test('IntrinsicHeight without a child', () {
361
    final RenderBox parent = RenderIntrinsicHeight();
362 363
    layout(
      parent,
Ian Hickson's avatar
Ian Hickson committed
364 365 366 367
      constraints: const BoxConstraints(
        minWidth: 5.0,
        minHeight: 8.0,
        maxWidth: 500.0,
368 369
        maxHeight: 800.0,
      ),
Ian Hickson's avatar
Ian Hickson committed
370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388
    );
    expect(parent.size.width, equals(5.0));
    expect(parent.size.height, equals(8.0));

    expect(parent.getMinIntrinsicWidth(0.0), equals(0.0));
    expect(parent.getMaxIntrinsicWidth(0.0), equals(0.0));
    expect(parent.getMinIntrinsicHeight(0.0), equals(0.0));
    expect(parent.getMaxIntrinsicHeight(0.0), equals(0.0));

    expect(parent.getMinIntrinsicWidth(10.0), equals(0.0));
    expect(parent.getMaxIntrinsicWidth(10.0), equals(0.0));
    expect(parent.getMinIntrinsicHeight(10.0), equals(0.0));
    expect(parent.getMaxIntrinsicHeight(10.0), equals(0.0));

    expect(parent.getMinIntrinsicWidth(80.0), equals(0.0));
    expect(parent.getMaxIntrinsicWidth(80.0), equals(0.0));
    expect(parent.getMinIntrinsicHeight(80.0), equals(0.0));
    expect(parent.getMaxIntrinsicHeight(80.0), equals(0.0));

389 390 391 392
    expect(parent.getMinIntrinsicWidth(double.infinity), equals(0.0));
    expect(parent.getMaxIntrinsicWidth(double.infinity), equals(0.0));
    expect(parent.getMinIntrinsicHeight(double.infinity), equals(0.0));
    expect(parent.getMaxIntrinsicHeight(double.infinity), equals(0.0));
Ian Hickson's avatar
Ian Hickson committed
393 394
  });

395
  test('RenderIntrinsicHeight when parent is given loose constraints smaller than intrinsic height of child', () {
396 397 398 399 400 401
    final RenderBox child = RenderTestBox(const BoxConstraints(
      minWidth: 10.0,
      maxWidth: 100.0,
      minHeight: 20.0,
      maxHeight: 200.0,
    ));
402
    final RenderBox parent = RenderIntrinsicHeight(child: child);
403 404
    layout(
      parent,
405 406 407 408 409 410 411 412 413 414 415 416 417 418
      constraints: const BoxConstraints(
        minWidth: 5.0,
        minHeight: 8.0,
        maxWidth: 500.0,
        maxHeight: 80.0,
      ),
    );
    expect(parent.size.width, equals(55));
    expect(parent.size.height, equals(80));
    expect(child.size.width, equals(55));
    expect(child.size.height, equals(80));
  });

  test('RenderIntrinsicHeight when parent is given tight constraints larger than intrinsic height of child', () {
419 420 421 422 423 424
    final RenderBox child = RenderTestBox(const BoxConstraints(
      minWidth: 10.0,
      maxWidth: 100.0,
      minHeight: 20.0,
      maxHeight: 200.0,
    ));
425
    final RenderBox parent = RenderIntrinsicHeight(child: child);
426 427
    layout(
      parent,
428 429 430 431 432 433 434 435 436 437 438 439 440 441
      constraints: const BoxConstraints(
        minWidth: 5.0,
        minHeight: 400.0,
        maxWidth: 500.0,
        maxHeight: 400.0,
      ),
    );
    expect(parent.size.width, equals(55));
    expect(parent.size.height, equals(400));
    expect(child.size.width, equals(55));
    expect(child.size.height, equals(400));
  });

  test('RenderIntrinsicHeight when parent is given tight constraints smaller than intrinsic height of child', () {
442 443 444 445 446 447
    final RenderBox child = RenderTestBox(const BoxConstraints(
      minWidth: 10.0,
      maxWidth: 100.0,
      minHeight: 20.0,
      maxHeight: 200.0,
    ));
448
    final RenderBox parent = RenderIntrinsicHeight(child: child);
449 450
    layout(
      parent,
451 452 453 454 455 456 457 458 459 460 461 462 463
      constraints: const BoxConstraints(
        minWidth: 5.0,
        minHeight: 80.0,
        maxWidth: 500.0,
        maxHeight: 80.0,
      ),
    );
    expect(parent.size.width, equals(55));
    expect(parent.size.height, equals(80));
    expect(child.size.width, equals(55));
    expect(child.size.height, equals(80));
  });

464
  test('Padding and boring intrinsics', () {
465
    final RenderBox box = RenderPadding(
466
      padding: const EdgeInsets.all(15.0),
467
      child: RenderSizedBox(const Size(20.0, 20.0)),
468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484
    );

    expect(box.getMinIntrinsicWidth(0.0), 50.0);
    expect(box.getMaxIntrinsicWidth(0.0), 50.0);
    expect(box.getMinIntrinsicHeight(0.0), 50.0);
    expect(box.getMaxIntrinsicHeight(0.0), 50.0);

    expect(box.getMinIntrinsicWidth(10.0), 50.0);
    expect(box.getMaxIntrinsicWidth(10.0), 50.0);
    expect(box.getMinIntrinsicHeight(10.0), 50.0);
    expect(box.getMaxIntrinsicHeight(10.0), 50.0);

    expect(box.getMinIntrinsicWidth(80.0), 50.0);
    expect(box.getMaxIntrinsicWidth(80.0), 50.0);
    expect(box.getMinIntrinsicHeight(80.0), 50.0);
    expect(box.getMaxIntrinsicHeight(80.0), 50.0);

485 486 487 488
    expect(box.getMinIntrinsicWidth(double.infinity), 50.0);
    expect(box.getMaxIntrinsicWidth(double.infinity), 50.0);
    expect(box.getMinIntrinsicHeight(double.infinity), 50.0);
    expect(box.getMaxIntrinsicHeight(double.infinity), 50.0);
489 490 491 492

    // also a smoke test:
    layout(
      box,
493
      constraints: const BoxConstraints(
494 495 496
        minWidth: 10.0,
        minHeight: 10.0,
        maxWidth: 10.0,
497 498
        maxHeight: 10.0,
      ),
499 500 501 502
    );
  });

  test('Padding and interesting intrinsics', () {
503
    final RenderBox box = RenderPadding(
504
      padding: const EdgeInsets.all(15.0),
505
      child: RenderAspectRatio(aspectRatio: 1.0),
506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522
    );

    expect(box.getMinIntrinsicWidth(0.0), 30.0);
    expect(box.getMaxIntrinsicWidth(0.0), 30.0);
    expect(box.getMinIntrinsicHeight(0.0), 30.0);
    expect(box.getMaxIntrinsicHeight(0.0), 30.0);

    expect(box.getMinIntrinsicWidth(10.0), 30.0);
    expect(box.getMaxIntrinsicWidth(10.0), 30.0);
    expect(box.getMinIntrinsicHeight(10.0), 30.0);
    expect(box.getMaxIntrinsicHeight(10.0), 30.0);

    expect(box.getMinIntrinsicWidth(80.0), 80.0);
    expect(box.getMaxIntrinsicWidth(80.0), 80.0);
    expect(box.getMinIntrinsicHeight(80.0), 80.0);
    expect(box.getMaxIntrinsicHeight(80.0), 80.0);

523 524 525 526
    expect(box.getMinIntrinsicWidth(double.infinity), 30.0);
    expect(box.getMaxIntrinsicWidth(double.infinity), 30.0);
    expect(box.getMinIntrinsicHeight(double.infinity), 30.0);
    expect(box.getMaxIntrinsicHeight(double.infinity), 30.0);
527 528 529 530

    // also a smoke test:
    layout(
      box,
531
      constraints: const BoxConstraints(
532 533 534
        minWidth: 10.0,
        minHeight: 10.0,
        maxWidth: 10.0,
535 536
        maxHeight: 10.0,
      ),
537
    );
Hixie's avatar
Hixie committed
538
  });
539 540

  test('Padding and boring intrinsics', () {
541
    final RenderBox box = RenderPadding(
542
      padding: const EdgeInsets.all(15.0),
543
      child: RenderSizedBox(const Size(20.0, 20.0)),
544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560
    );

    expect(box.getMinIntrinsicWidth(0.0), 50.0);
    expect(box.getMaxIntrinsicWidth(0.0), 50.0);
    expect(box.getMinIntrinsicHeight(0.0), 50.0);
    expect(box.getMaxIntrinsicHeight(0.0), 50.0);

    expect(box.getMinIntrinsicWidth(10.0), 50.0);
    expect(box.getMaxIntrinsicWidth(10.0), 50.0);
    expect(box.getMinIntrinsicHeight(10.0), 50.0);
    expect(box.getMaxIntrinsicHeight(10.0), 50.0);

    expect(box.getMinIntrinsicWidth(80.0), 50.0);
    expect(box.getMaxIntrinsicWidth(80.0), 50.0);
    expect(box.getMinIntrinsicHeight(80.0), 50.0);
    expect(box.getMaxIntrinsicHeight(80.0), 50.0);

561 562 563 564
    expect(box.getMinIntrinsicWidth(double.infinity), 50.0);
    expect(box.getMaxIntrinsicWidth(double.infinity), 50.0);
    expect(box.getMinIntrinsicHeight(double.infinity), 50.0);
    expect(box.getMaxIntrinsicHeight(double.infinity), 50.0);
565 566 567 568

    // also a smoke test:
    layout(
      box,
569
      constraints: const BoxConstraints(
570 571 572
        minWidth: 10.0,
        minHeight: 10.0,
        maxWidth: 10.0,
573 574
        maxHeight: 10.0,
      ),
575 576 577 578
    );
  });

  test('Padding and interesting intrinsics', () {
579
    final RenderBox box = RenderPadding(
580
      padding: const EdgeInsets.all(15.0),
581
      child: RenderAspectRatio(aspectRatio: 1.0),
582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598
    );

    expect(box.getMinIntrinsicWidth(0.0), 30.0);
    expect(box.getMaxIntrinsicWidth(0.0), 30.0);
    expect(box.getMinIntrinsicHeight(0.0), 30.0);
    expect(box.getMaxIntrinsicHeight(0.0), 30.0);

    expect(box.getMinIntrinsicWidth(10.0), 30.0);
    expect(box.getMaxIntrinsicWidth(10.0), 30.0);
    expect(box.getMinIntrinsicHeight(10.0), 30.0);
    expect(box.getMaxIntrinsicHeight(10.0), 30.0);

    expect(box.getMinIntrinsicWidth(80.0), 80.0);
    expect(box.getMaxIntrinsicWidth(80.0), 80.0);
    expect(box.getMinIntrinsicHeight(80.0), 80.0);
    expect(box.getMaxIntrinsicHeight(80.0), 80.0);

599 600 601 602
    expect(box.getMinIntrinsicWidth(double.infinity), 30.0);
    expect(box.getMaxIntrinsicWidth(double.infinity), 30.0);
    expect(box.getMinIntrinsicHeight(double.infinity), 30.0);
    expect(box.getMaxIntrinsicHeight(double.infinity), 30.0);
603 604 605 606

    // also a smoke test:
    layout(
      box,
607
      constraints: const BoxConstraints(
608 609 610
        minWidth: 10.0,
        minHeight: 10.0,
        maxWidth: 10.0,
611 612
        maxHeight: 10.0,
      ),
613 614
    );
  });
Hixie's avatar
Hixie committed
615
}