// 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/rendering.dart';
import 'package:test/test.dart';

import 'rendering_tester.dart';

void main() {
  test('RenderPositionedBox expands', () {
    final RenderConstrainedBox sizer = new RenderConstrainedBox(
      additionalConstraints: new BoxConstraints.tight(const Size(100.0, 100.0)),
      child: new RenderDecoratedBox(decoration: const BoxDecoration())
    );
    final RenderPositionedBox positioner = new RenderPositionedBox(child: sizer);
    layout(positioner, constraints: new BoxConstraints.loose(const Size(200.0, 200.0)));

    expect(positioner.size.width, equals(200.0), reason: 'positioner width');
    expect(positioner.size.height, equals(200.0), reason: 'positioner height');
  });

  test('RenderPositionedBox shrink wraps', () {
    final RenderConstrainedBox sizer = new RenderConstrainedBox(
      additionalConstraints: new BoxConstraints.tight(const Size(100.0, 100.0)),
      child: new RenderDecoratedBox(decoration: const BoxDecoration())
    );
    final RenderPositionedBox positioner = new RenderPositionedBox(child: sizer, widthFactor: 1.0);
    layout(positioner, constraints: new BoxConstraints.loose(const Size(200.0, 200.0)));

    expect(positioner.size.width, equals(100.0), reason: 'positioner width');
    expect(positioner.size.height, equals(200.0), reason: 'positioner height');

    positioner.widthFactor = null;
    positioner.heightFactor = 1.0;
    pumpFrame();

    expect(positioner.size.width, equals(200.0), reason: 'positioner width');
    expect(positioner.size.height, equals(100.0), reason: 'positioner height');

    positioner.widthFactor = 1.0;
    pumpFrame();

    expect(positioner.size.width, equals(100.0), reason: 'positioner width');
    expect(positioner.size.height, equals(100.0), reason: 'positioner height');
  });

  test('RenderPositionedBox width and height factors', () {
    final RenderConstrainedBox sizer = new RenderConstrainedBox(
      additionalConstraints: new BoxConstraints.tight(const Size(100.0, 100.0)),
      child: new RenderDecoratedBox(decoration: const BoxDecoration())
    );
    final RenderPositionedBox positioner = new RenderPositionedBox(child: sizer, widthFactor: 1.0, heightFactor: 0.0);
    layout(positioner, constraints: new BoxConstraints.loose(const Size(200.0, 200.0)));

    expect(positioner.size.width, equals(100.0));
    expect(positioner.size.height, equals(0.0));

    positioner.widthFactor = 0.5;
    positioner.heightFactor = 0.5;
    pumpFrame();

    expect(positioner.size.width, equals(50.0));
    expect(positioner.size.height, equals(50.0));

    positioner.widthFactor = null;
    positioner.heightFactor = null;
    pumpFrame();

    expect(positioner.size.width, equals(200.0));
    expect(positioner.size.height, equals(200.0));
  });
}
