| // 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. | |
| library canvas_rendering_context_2d_test; | |
| import 'dart:async'; | |
| import 'dart:html'; | |
| import 'dart:math'; | |
| import 'canvas_rendering_util.dart'; | |
| import 'package:expect/async_helper.dart'; | |
| Future testWithThreeParams() async { | |
| setupFunc(); | |
| // Draw an image to the canvas from an image element. | |
| var dataUrl = otherCanvas.toDataUrl('image/gif'); | |
| var img = new ImageElement(); | |
| var loadedFuture = img.onLoad.first; | |
| img.onError.listen((_) { | |
| throw ('URL failed to load.'); | |
| }); | |
| img.src = dataUrl; | |
| await loadedFuture; | |
| context.drawImage(img, 50, 50); | |
| expectPixelFilled(50, 50); | |
| expectPixelFilled(55, 55); | |
| expectPixelFilled(59, 59); | |
| expectPixelUnfilled(60, 60); | |
| expectPixelUnfilled(0, 0); | |
| expectPixelUnfilled(70, 70); | |
| tearDownFunc(); | |
| } | |
| Future testWithFiveParams() async { | |
| setupFunc(); | |
| // Draw an image to the canvas from an image element and scale it. | |
| var dataUrl = otherCanvas.toDataUrl('image/gif'); | |
| var img = new ImageElement(); | |
| var loadedFuture = img.onLoad.first; | |
| img.onError.listen((_) { | |
| throw ('URL failed to load.'); | |
| }); | |
| img.src = dataUrl; | |
| await loadedFuture; | |
| context.drawImageToRect(img, new Rectangle(50, 50, 20, 20)); | |
| expectPixelFilled(50, 50); | |
| expectPixelFilled(55, 55); | |
| expectPixelFilled(59, 59); | |
| expectPixelFilled(60, 60); | |
| expectPixelFilled(69, 69); | |
| expectPixelUnfilled(70, 70); | |
| expectPixelUnfilled(0, 0); | |
| expectPixelUnfilled(80, 80); | |
| tearDownFunc(); | |
| } | |
| Future testWithNineParams() async { | |
| setupFunc(); | |
| // Draw an image to the canvas from an image element and scale it. | |
| otherContext.fillStyle = "blue"; | |
| otherContext.fillRect(5, 5, 5, 5); | |
| var dataUrl = otherCanvas.toDataUrl('image/gif'); | |
| var img = new ImageElement(); | |
| var loadedFuture = img.onLoad.first; | |
| img.onError.listen((_) { | |
| throw ('URL failed to load.'); | |
| }); | |
| img.src = dataUrl; | |
| await loadedFuture; | |
| // This will take a 6x6 square from the first canvas from position 2,2 | |
| // and then scale it to a 20x20 square and place it to the second | |
| // canvas at 50,50. | |
| context.drawImageToRect( | |
| img, | |
| new Rectangle(50, 50, 20, 20), | |
| sourceRect: new Rectangle(2, 2, 6, 6), | |
| ); | |
| checkPixel(readPixel(50, 50), [255, 0, 0, 255]); | |
| checkPixel(readPixel(55, 55), [255, 0, 0, 255]); | |
| checkPixel(readPixel(60, 50), [255, 0, 0, 255]); | |
| checkPixel(readPixel(65, 65), [0, 0, 255, 255]); | |
| checkPixel(readPixel(69, 69), [0, 0, 255, 255]); | |
| expectPixelFilled(50, 50); | |
| expectPixelFilled(55, 55); | |
| expectPixelFilled(59, 59); | |
| expectPixelFilled(60, 60); | |
| expectPixelFilled(69, 69); | |
| expectPixelUnfilled(70, 70); | |
| expectPixelUnfilled(0, 0); | |
| expectPixelUnfilled(80, 80); | |
| tearDownFunc(); | |
| } | |
| main() { | |
| asyncTest(() async { | |
| await testWithThreeParams(); | |
| await testWithFiveParams(); | |
| await testWithNineParams(); | |
| }); | |
| } |