// 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_name_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.
  var appendChild = 123;
}

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!');
    });
  });
}
