blob: 6fe6a2bfe843b9f2ec08e411fb976cac17cb08ac [file] [log] [blame]
// 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 'dart:html';
import 'package:polymer/polymer.dart';
import 'package:unittest/unittest.dart';
import 'package:unittest/html_config.dart';
import 'package:unittest/matcher.dart';
var _changes = 0;
final _done = new Completer();
checkDone() {
if (6 == ++_changes) {
_done.complete();
}
}
@CustomTag('x-test')
class XTest extends PolymerElement {
@observable String bar = '';
@observable String pie;
@observable Map a;
XTest.created() : super.created();
ready() {
bar = 'bar';
pie = 'pie';
a = {'b': {'c': 'exists'}};
}
barChanged() {
// Dart note: unlike polymer-js we support multiple observers, due to how
// our @ObserveProperty metadata translated.
// _done.completeError('barChanged should not be called.');
expect('bar', 'bar', reason: 'barChanged called');
checkDone();
}
@ObserveProperty('bar pie')
validate() {
window.console.log('validate');
expect('bar', 'bar', reason: 'custom change observer called');
expect('pie', 'pie', reason: 'custom change observer called');
checkDone();
}
// Dart note: test that we can observe "pie" twice.
@ObserveProperty('pie')
validateYummyPie() {
window.console.log('validateYummyPie');
expect('pie', 'pie', reason: 'validateYummyPie called');
checkDone();
}
@ObserveProperty('a.b.c')
validateSubPath(oldValue, newValue) {
window.console.log('validateSubPath $oldValue $newValue');
expect(newValue, 'exists', reason: 'subpath change observer called');
checkDone();
}
}
@CustomTag('x-test2')
class XTest2 extends XTest {
@observable String noogle;
XTest2.created() : super.created();
@ObserveProperty('noogle')
validate() => super.validate();
ready() {
super.ready();
noogle = 'noogle';
}
}
@initMethod
main() {
useHtmlConfiguration();
setUp(() => Polymer.onReady);
test('changes detected', () => _done.future);
}