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

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

@CustomTag('x-target')
class XTarget extends PolymerElement {
  final Completer _found = new Completer();
  Future get foundSrc => _found.future;

  // force an mdv binding
  bind(name, model, path) =>
      TemplateElement.mdvPackage(this).bind(name, model, path);

  inserted() {
    testSrcForMustache();
  }

  attributeChanged(name, oldValue) {
    testSrcForMustache();
    if (attributes[name] == '../testSource') {
      _found.complete();
    }
  }

  testSrcForMustache() {
    expect(attributes['src'], isNot(matches(Polymer.bindPattern)),
        reason: 'attribute does not contain {{...}}');
  }
}

@CustomTag('x-test')
class XTest extends PolymerElement {
  @observable var src = 'testSource';
}

main() {
  useHtmlConfiguration();

  test('mustache attributes', () {
    final xtest = document.query('#test').xtag;
    final xtarget = xtest.shadowRoot.query('#target').xtag;
    return xtarget.foundSrc;
  });
}
