// 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:sky/widgets/basic.dart';

import '../resources/display_list.dart';

class ChildComponent extends Component {
  ChildComponent(this.size);

  final Size size;

  Widget build() {
    String text = "This text should be roughly centered";
    return new Positioned(child: new Text(text),
        top: size.height / 2.0, left: size.width / 2.0);
  }
}

class ParentComponent extends StatefulComponent {
  Size _size = new Size(100.0, 100.0);

  void syncConstructorArguments(ParentComponent source) {
  }

  Widget build() {
    return new SizeObserver(
      child : new Stack([new ChildComponent(_size)]),
      callback : sizeCallback
    );
  }

  void sizeCallback(Size size) {
    setState(() {
      _size = size;
    });
  }
}

main() async {
  WidgetTester tester = new WidgetTester();

  await tester.test(() {
    return new ParentComponent();
  }, frameCount: 2);

  tester.endTest();
}
