// Copyright (c) 2011, 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.

// Put universally passing event constructors in this file.
// Move constructors that fail on some configuration to their own
// element_constructor_foo_test.dart file.

import 'dart:html';

import 'package:expect/legacy/minitest.dart'; // ignore: deprecated_member_use_from_same_package

main() {
  var isAnchorElement =
      predicate((x) => x is AnchorElement, 'is an AnchorElement');
  var isAreaElement = predicate((x) => x is AreaElement, 'is an AreaElement');
  var isDivElement = predicate((x) => x is DivElement, 'is a DivElement');
  var isCanvasElement =
      predicate((x) => x is CanvasElement, 'is a CanvasElement');
  var isParagraphElement =
      predicate((x) => x is ParagraphElement, 'is a ParagraphElement');
  var isSpanElement = predicate((x) => x is SpanElement, 'is a SpanElement');
  var isSelectElement =
      predicate((x) => x is SelectElement, 'is a SelectElement');

  test('anchor1', () {
    var e = new AnchorElement();
    expect(e, isAnchorElement);
  });

  test('anchor2', () {
    var e = new AnchorElement(href: '#blah');
    expect(e, isAnchorElement);
    expect(e.href!.endsWith('#blah'), isTrue);
  });

  test('area', () {
    var e = new AreaElement();
    expect(e, isAreaElement);
  });

  // AudioElement tested in audioelement_test.dart

  test('div', () {
    var e = new DivElement();
    expect(e, isDivElement);
  });

  test('canvas1', () {
    var e = new CanvasElement();
    expect(e, isCanvasElement);
  });

  test('canvas2', () {
    var e = new CanvasElement(height: 100, width: 200);
    expect(e, isCanvasElement);
    expect(e.width, 200);
    expect(e.height, 100);
  });

  test('p', () {
    var e = new ParagraphElement();
    expect(e, isParagraphElement);
  });

  test('span', () {
    var e = new SpanElement();
    expect(e, isSpanElement);
  });

  test('select', () {
    var e = new SelectElement();
    expect(e, isSelectElement);
  });
}
