// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

library polymer.test.entered_view_test;

import 'dart:async';
import 'dart:html';
import 'package:polymer/polymer.dart';
import 'package:unittest/unittest.dart';
import 'package:unittest/html_config.dart';
import 'package:unittest/matcher.dart';

@reflectable
class XOuter extends PolymerElement {
  @observable bool expand = false;

  XOuter.created() : super.created();
}

@reflectable
class XInner extends PolymerElement {
  int enteredCount = 0;

  XInner.created() : super.created();

  enteredView() {
    enteredCount++;
    super.enteredView();
  }
}

main() => initPolymer().run(_tests);

_tests() {
  useHtmlConfiguration();
  Polymer.register('x-inner', XInner);
  Polymer.register('x-outer', XOuter);

  setUp(() => Polymer.onReady);

  test('element created properly', () {
    XOuter outer = query('x-outer');
    outer.expand = true;
    return outer.onMutation(outer.shadowRoot).then((_) {
      // Element upgrade is also using mutation observers. Wait another tick so
      // it goes before we do.
      return new Future(() {
        XInner inner = outer.shadowRoot.query('x-inner');
        expect(inner.enteredCount, 1, reason: 'enteredView should be called');
      });
    });
  });
}
