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

// @dart = 2.9

import 'dart:html';

import 'package:expect/minitest.dart';

import 'utils.dart';

main() {
  test('create via custom tag', () {
    var element = new Element.tag('x-basic1')..id = 'basic1';
    document.body.nodes.add(element);

    var queryById = querySelector('#basic1');
    expect(queryById, equals(element));

    var queryByTag = querySelectorAll('x-basic1');
    expect(queryByTag.length, equals(1));
    expect(queryByTag[0], equals(element));
  });

  test('custom inner html', () {
    var element = new DivElement();
    element.setInnerHtml("<x-basic2 id='basic2'></x-basic2>",
        treeSanitizer: new NullTreeSanitizer());
    document.body.nodes.add(element);

    var queryById = querySelector('#basic2');
    expect(queryById is Element, isTrue);

    var queryByTag = querySelectorAll('x-basic2');
    expect(queryByTag.length, equals(1));
    expect(queryByTag[0], equals(queryById));
  });

  test('type extension inner html', () {
    var element = new DivElement();
    element.setInnerHtml("<div is='x-basic3' id='basic3'></div>",
        treeSanitizer: new NullTreeSanitizer());
    document.body.nodes.add(element);

    var queryById = querySelector('#basic3');
    expect(queryById is DivElement, isTrue);
  });
}
