import 'package:sky/animation.dart';
import 'package:sky/widgets.dart';
import 'package:test/test.dart';

import 'widget_tester.dart';

class InnerComponent extends StatefulComponent {
  InnerComponent();

  bool _didInitState = false;

  void initState() {
    _didInitState = true;
  }

  void syncConstructorArguments(InnerComponent source) {
  }

  Widget build() {
    return new Container();
  }
}

class OutterContainer extends StatefulComponent {
  OutterContainer({ this.child });

  InnerComponent child;

  void syncConstructorArguments(OutterContainer source) {
    child = source.child;
  }

  Widget build() {
    return child;
  }
}

void main() {
  test('resync stateful widget', () {

    WidgetTester tester = new WidgetTester();

    InnerComponent inner;
    OutterContainer outter;

    tester.pumpFrame(() {
      return new OutterContainer(child: new InnerComponent());
    });

    tester.pumpFrame(() {
      inner = new InnerComponent();
      outter = new OutterContainer(child: inner);
      return outter;
    });

    expect(inner._didInitState, isFalse);
    expect(inner.parent, isNull);

    outter.setState(() {});
    scheduler.beginFrame(0.0);

    expect(inner._didInitState, isFalse);
    expect(inner.parent, isNull);

  });
}