// Copyright (c) 2015, 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 custom_elements_method_clash;

import 'dart:async';
import 'dart:html';
import 'package:unittest/html_individual_config.dart';
import 'package:unittest/unittest.dart';
import 'utils.dart';

class CustomElement extends HtmlElement {
  factory CustomElement() => new Element.tag('x-custom');

  CustomElement.created() : super.created() {}

  // Try to clash with native 'appendChild' method.
  void appendChild() {
    throw 'Gotcha!';
  }
}

main() {
  useHtmlIndividualConfiguration();

  setUp(() => customElementsReady);

  group('test', () {
    test('test', () {
      document.registerElement('x-custom', CustomElement);
      CustomElement custom = new CustomElement();
      document.body.children.add(custom);

      // Will call appendChild in JS.
      custom.children.add(new DivElement()..text = 'Hello world!');

      try {
        custom.appendChild(); // Make sure method is not tree shaken.
        fail('appendChild did not throw');
      } catch (e) {
        expect(e, equals('Gotcha!'));
      }
    });
  });
}
