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

// @dart = 2.9

library custom_elements_method_clash;

import 'dart:async';
import 'dart:html';
import 'package:async_helper/async_minitest.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() async {
  await customElementsReady;

  group('test', () {
    test('test', () {
      document.registerElement2('x-custom', {'prototype': 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!'));
      }
    });
  });
}
