blob: 2e185d7c78a69508954bfba6c03fa4e3ad74bd49 [file] [log] [blame]
<html>
<body>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<canvas id="source"></canvas>
<canvas id="default"></canvas>
<script>
var source = document.createElement('canvas');
source.width = 60;
source.height = 12;
var sourceContext = source.getContext('2d');
var sourceImage = sourceContext.createImageData(source.width, source.height);
function drawBlackDot(x, y) {
var offset = y * 4 * source.width + x * 4;
sourceImage.data[offset + 0] = 0 ; // R
sourceImage.data[offset + 1] = 0 ; // G
sourceImage.data[offset + 2] = 0 ; // B
sourceImage.data[offset + 3] = 202 - y ; // Alpha
}
for (var x = 0; x < source.width; x++) {
for (var y = 1; y < 3; y++) {
drawBlackDot(x, y);
}
}
sourceContext.putImageData(sourceImage, 0, 0);
function scaleTestResults(quality){
var canvas = document.createElement("canvas");
canvas.id = quality + "Canvas";
document.body.appendChild(canvas);
canvas.width = sourceImage.width / 4;
canvas.height = sourceImage.height / 4;
return scaleImageData(canvas, quality);
}
function scaleImageData(destinationCanvas, quality) {
var context = destinationCanvas.getContext("2d");
if (quality)
context.imageSmoothingQuality = quality;
context.drawImage(source, 0, 0, destinationCanvas.width,
destinationCanvas.height);
var data = context.getImageData(0, 0, 1, 1).data;
context.clearRect(0, 0, destinationCanvas.width, destinationCanvas.height);
return JSON.stringify(data);
}
function sampleAlpha(data){
return JSON.parse(data)[3]
}
test(function(t) {
// On getting, must return the last value it was set to.");
var lowData = scaleTestResults("low");
var lowContext = document.getElementById("lowCanvas").getContext('2d');
assert_equals(lowContext.imageSmoothingQuality, 'low');
var mediumData = scaleTestResults("medium");
var mediumContext = document.getElementById("mediumCanvas").getContext('2d');
assert_equals(mediumContext.imageSmoothingQuality, 'medium');
var highData = scaleTestResults("high");
var highContext = document.getElementById("highCanvas").getContext('2d');
var highCanvas = document.getElementById("highCanvas");
assert_equals(highContext.imageSmoothingQuality, 'high');
lowContext.imageSmoothingEnabled = false;
var noFilterData = scaleImageData(lowCanvas, lowCanvas.imageSmoothingQuality);
// No filtering uses kNone quality, while with imageSmoothingEnabled we use the
// same quality.
assert_false(noFilterData === mediumData);
// On setting, it must be set to the new value.
highContext.imageSmoothingQuality = 'medium';
assert_equals(highContext.imageSmoothingQuality, 'medium');
highContext.imageSmoothingQuality = 'high';
assert_equals(highContext.imageSmoothingQuality, 'high');
// When the CanvasRenderingContext2D object is created, the attribute must be set to 'low'.
assert_equals(document.getElementById("default").getContext("2d").imageSmoothingQuality, 'low');
// ImageSmoothingQuality can be set without real effect when imageSmoothingEnabled is false.
highContext.imageSmoothingEnabled = false;
assert_equals(highContext.imageSmoothingQuality, 'high');
assert_equals(scaleImageData(highCanvas, highCanvas.imageSmoothingQuality),
noFilterData);
highContext.imageSmoothingQuality = 'medium';
assert_equals(highContext.imageSmoothingQuality, 'medium');
assert_equals(scaleImageData(highCanvas, highCanvas.imageSmoothingQuality),
noFilterData);
// Invalid Input is not accepted.
highContext.imageSmoothingEnabled = true;
highContext.imageSmoothingQuality = 'high';
scaleImageData(highCanvas, '3223');
assert_equals(highContext.imageSmoothingQuality, 'high');
scaleImageData(highCanvas, 'bad_input');
assert_equals(highContext.imageSmoothingQuality, 'high');
scaleImageData(highCanvas, 'LOW');
assert_equals(highContext.imageSmoothingQuality, 'high');
scaleImageData(highCanvas, 'Medium');
assert_equals(highContext.imageSmoothingQuality, 'high');
// The save() and restore() should work.
highContext.save();
highContext.imageSmoothingQuality = 'medium';
assert_equals(highContext.imageSmoothingQuality, 'medium');
assert_equals(scaleImageData(highCanvas, highCanvas.imageSmoothingQuality), mediumData);
highContext.restore();
assert_equals(highContext.imageSmoothingQuality, 'high');
assert_equals(scaleImageData(highCanvas, highCanvas.imageSmoothingQuality), highData);
}, 'Tests for the imageSmoothingQuality attribute.');
</script>
</body>