blob: 09e8984cd09d324424c451fd6600d62ac283d56c [file] [log] [blame]
// Copyright (c) 2012, 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
library canvas_rendering_context_2d_test;
import 'dart:html';
import 'dart:math';
import 'package:expect/minitest.dart';
// Some rounding errors in the browsers.
checkPixel(List<int> pixel, List<int> expected) {
expect(pixel[0], closeTo(expected[0], 2));
expect(pixel[1], closeTo(expected[1], 2));
expect(pixel[2], closeTo(expected[2], 2));
expect(pixel[3], closeTo(expected[3], 2));
}
var canvas;
var context;
var otherCanvas;
var otherContext;
var video;
void createCanvas() {
canvas = new CanvasElement();
canvas.width = 100;
canvas.height = 100;
context = canvas.context2D;
}
void createOtherCanvas() {
otherCanvas = new CanvasElement();
otherCanvas.width = 10;
otherCanvas.height = 10;
otherContext = otherCanvas.context2D;
otherContext.fillStyle = "red";
otherContext.fillRect(0, 0, otherCanvas.width, otherCanvas.height);
}
void setupFunc() {
createCanvas();
createOtherCanvas();
video = new VideoElement();
}
void tearDownFunc() {
canvas = null;
context = null;
otherCanvas = null;
otherContext = null;
video = null;
}
List<int> readPixel(int x, int y) {
var imageData = context.getImageData(x, y, 1, 1);
return imageData.data;
}
/// Returns true if the pixel has some data in it, false otherwise.
bool isPixelFilled(int x, int y) => readPixel(x, y).any((p) => p != 0);
String pixelDataToString(List<int> data, int x, int y) {
return '[${data.join(", ")}]';
}
String _filled(bool v) => v ? "filled" : "unfilled";
void expectPixelFilled(int x, int y, [bool filled = true]) {
expect(isPixelFilled(x, y), filled,
reason: 'Pixel at ($x, $y) was expected to'
' be: <${_filled(filled)}> but was: <${_filled(!filled)}> with data: '
'${pixelDataToString(readPixel(x, y), x, y)}');
}
void expectPixelUnfilled(int x, int y) {
expectPixelFilled(x, y, false);
}