
// @dart = 2.9
import 'dart:html';

import 'package:expect/minitest.dart';

main() {
  CanvasElement canvas;

  canvas = new Element.tag('canvas');
  canvas.attributes['width'] = '100';
  canvas.attributes['height'] = '100';
  document.body.append(canvas);

  var isCanvasRenderingContext = predicate(
      (x) => x is CanvasRenderingContext, 'is a CanvasRenderingContext');
  var isNotCanvasRenderingContext = predicate(
      (x) => x is! CanvasRenderingContext, 'is not a CanvasRenderingContext');
  var isCanvasRenderingContext2D = predicate(
      (x) => x is CanvasRenderingContext2D, 'is a CanvasRenderingContext2D');
  var isNotCanvasRenderingContext2D = predicate(
      (x) => x is! CanvasRenderingContext2D,
      'is not a CanvasRenderingContext2D');
  var isElement = predicate((x) => x is Element, 'is an Element');
  var isNotElement = predicate((x) => x is! Element, 'is not an Element');
  var isCanvasElement =
      predicate((x) => x is CanvasElement, 'is a CanvasElement');
  var isNotCanvasElement =
      predicate((x) => x is! CanvasElement, 'is not a CanvasElement');
  var isImageData = predicate((x) => x is ImageData, 'is an ImageData');
  var isNotImageData = predicate((x) => x is! ImageData, 'is not an ImageData');
  //var isUint8ClampedArray =
  //  predicate((x) => x is Uint8ClampedArray, 'is a Uint8ClampedArray');
  var isIntList = predicate((x) => x is List<int>, 'is a List<int>');

  test('Instanceof', () {
    expect(canvas, isNotCanvasRenderingContext);
    expect(canvas, isNotCanvasRenderingContext2D);
    expect(canvas, isElement);
    expect(canvas, isCanvasElement);
    expect(canvas, isNotImageData);
    // expect(canvas, isNot(isCanvasPixelArray));

    CanvasRenderingContext2D context = canvas.getContext('2d');
    expect(context, isCanvasRenderingContext);
    expect(context, isCanvasRenderingContext2D);
    expect(context, isNotElement);
    expect(context, isNotCanvasElement);
    expect(context, isNotImageData);
    // expect(context, isNot(isCanvasPixelArray));

    // FIXME(b/5286633): Interface injection type check workaround.
    var image = context.createImageData(
        canvas.width as dynamic, canvas.height as dynamic);
    expect(image, isNotCanvasRenderingContext);
    expect(image, isNotCanvasRenderingContext2D);
    expect(image, isNotElement);
    expect(image, isNotCanvasElement);
    expect(image, isImageData);
    // expect(image, isNot(isCanvasPixelArray));

    // Include CanvasPixelArray since constructor and prototype are not
    // available until one is created.
    var bytes = image.data;
    expect(bytes, isNotCanvasRenderingContext);
    expect(bytes, isNotCanvasRenderingContext2D);
    expect(bytes, isNotElement);
    expect(bytes, isNotCanvasElement);
    expect(bytes, isNotImageData);
    expect(bytes, isIntList);

    // FIXME: Ensure this is an SpanElement when we next update
    // WebKit IDL.
    var span = new Element.tag('span');
    expect(span, isElement);
  });
}
