| // Copyright (c) 2020, 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. |
| |
| import 'dart:html'; |
| |
| import 'package:expect/minitest.dart'; |
| |
| main() { |
| var 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)); |
| |
| var 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 as CanvasRenderingContext2D) |
| .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); |
| }); |
| } |