intrinsic_width_test.dart 21.2 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 49
  }
}

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

    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));

86 87 88 89
    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
90 91
  });

Ian Hickson's avatar
Ian Hickson committed
92
  test('IntrinsicWidth without a child', () {
93
    final RenderBox parent = RenderIntrinsicWidth();
94 95
    layout(
      parent,
Ian Hickson's avatar
Ian Hickson committed
96 97 98 99
      constraints: const BoxConstraints(
        minWidth: 5.0,
        minHeight: 8.0,
        maxWidth: 500.0,
100 101
        maxHeight: 800.0,
      ),
Ian Hickson's avatar
Ian Hickson committed
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
    );
    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));

121 122 123 124
    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
125 126
  });

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

    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));

164 165 166 167
    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));
168 169 170
  });

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

205 206 207 208
    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));
209 210 211
  });

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

231 232 233 234 235 236 237 238 239 240 241 242 243 244 245
    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));

246 247 248 249
    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));
250 251
  });

252
  test('RenderIntrinsicWidth when parent is given loose constraints smaller than intrinsic width of child', () {
253 254 255 256 257 258
    final RenderBox child = RenderTestBox(const BoxConstraints(
      minWidth: 10.0,
      maxWidth: 100.0,
      minHeight: 20.0,
      maxHeight: 200.0,
    ));
259
    final RenderBox parent = RenderIntrinsicWidth(child: child);
260 261
    layout(
      parent,
262 263 264 265 266 267 268 269 270 271 272 273 274 275
      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', () {
276 277
    final RenderBox child =
        RenderTestBox(const BoxConstraints(minWidth: 10.0, maxWidth: 100.0, minHeight: 20.0, maxHeight: 200.0));
278
    final RenderBox parent = RenderIntrinsicWidth(child: child);
279 280
    layout(
      parent,
281 282 283 284 285 286 287 288 289 290 291 292 293 294
      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', () {
295 296 297 298 299 300
    final RenderBox child = RenderTestBox(const BoxConstraints(
      minWidth: 10.0,
      maxWidth: 100.0,
      minHeight: 20.0,
      maxHeight: 200.0,
    ));
301
    final RenderBox parent = RenderIntrinsicWidth(child: child);
302 303
    layout(
      parent,
304 305 306 307 308 309 310 311 312 313 314 315 316
      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));
  });

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

    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));

352 353 354 355
    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));
356 357
  });

Ian Hickson's avatar
Ian Hickson committed
358
  test('IntrinsicHeight without a child', () {
359
    final RenderBox parent = RenderIntrinsicHeight();
360 361
    layout(
      parent,
Ian Hickson's avatar
Ian Hickson committed
362 363 364 365
      constraints: const BoxConstraints(
        minWidth: 5.0,
        minHeight: 8.0,
        maxWidth: 500.0,
366 367
        maxHeight: 800.0,
      ),
Ian Hickson's avatar
Ian Hickson committed
368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386
    );
    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));

387 388 389 390
    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
391 392
  });

393
  test('RenderIntrinsicHeight when parent is given loose constraints smaller than intrinsic height of child', () {
394 395 396 397 398 399
    final RenderBox child = RenderTestBox(const BoxConstraints(
      minWidth: 10.0,
      maxWidth: 100.0,
      minHeight: 20.0,
      maxHeight: 200.0,
    ));
400
    final RenderBox parent = RenderIntrinsicHeight(child: child);
401 402
    layout(
      parent,
403 404 405 406 407 408 409 410 411 412 413 414 415 416
      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', () {
417 418 419 420 421 422
    final RenderBox child = RenderTestBox(const BoxConstraints(
      minWidth: 10.0,
      maxWidth: 100.0,
      minHeight: 20.0,
      maxHeight: 200.0,
    ));
423
    final RenderBox parent = RenderIntrinsicHeight(child: child);
424 425
    layout(
      parent,
426 427 428 429 430 431 432 433 434 435 436 437 438 439
      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', () {
440 441 442 443 444 445
    final RenderBox child = RenderTestBox(const BoxConstraints(
      minWidth: 10.0,
      maxWidth: 100.0,
      minHeight: 20.0,
      maxHeight: 200.0,
    ));
446
    final RenderBox parent = RenderIntrinsicHeight(child: child);
447 448
    layout(
      parent,
449 450 451 452 453 454 455 456 457 458 459 460 461
      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));
  });

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

    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);

483 484 485 486
    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);
487 488 489 490

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

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

    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);

521 522 523 524
    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);
525 526 527 528

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

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

    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);

559 560 561 562
    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);
563 564 565 566

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

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

    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);

597 598 599 600
    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);
601 602 603 604

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