// 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.property_change_test;

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

// Dart note: this is a tad different from the JS code. We don't support putting
// expandos on Dart objects and then observing them. On the other hand, we want
// to make sure that superclass observers are correctly detected.

final _zonk = new Completer();
final _bar = new Completer();

@reflectable
class XBase extends PolymerElement {
  @observable String zonk = '';

  XBase.created() : super.created();

  zonkChanged() {
    expect(zonk, 'zonk', reason: 'change calls *Changed on superclass');
    _zonk.complete();
  }
}

@CustomTag('x-test')
class XTest extends XBase {
  @observable String bar = '';

  XTest.created() : super.created();

  ready() {
    bar = 'bar';
    new Future(() { zonk = 'zonk'; });
  }

  barChanged() {
    expect(bar, 'bar', reason: 'change in ready calls *Changed');
    _bar.complete();
  }
}

main() => initPolymer().run(() {
  useHtmlConfiguration();

  setUp(() => Polymer.onReady);

  test('bar change detected', () => _bar.future);
  test('zonk change detected', () => _zonk.future);
});
