blob: a6b202e8f2bd671ce5074146d127abf6d2baf910 [file] [log] [blame]
<!DOCTYPE html>
<body>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
var xWidth = xHeight = 10;
function checkImageData(canvasColorSettings, imageData) {
var imageDataColorSettings = imageData.getColorSettings();
assert_equals(canvasColorSettings.colorSpace, imageDataColorSettings.colorSpace);
if (canvasColorSettings.pixelFormat == "uint8") {
assert_equals("uint8", imageDataColorSettings.storageFormat);
assert_equals(imageData.data.length, 4 * xWidth * xHeight);
} else {
assert_equals("float32", imageDataColorSettings.storageFormat);
assert_equals(imageData.dataUnion.length, 4 * xWidth * xHeight);
}
}
// Test createImageData when the canvas is color managed
var helperImageData = new ImageData(xWidth, xHeight);
function runTestCreateImageData(canvasColorSettings) {
var aCanvas = document.createElement("canvas");
aCanvas.width = xWidth;
aCanvas.height = xHeight;
var ctx = aCanvas.getContext('2d', canvasColorSettings);
var imageData = ctx.createImageData(xWidth, xHeight);
checkImageData(canvasColorSettings, imageData);
imageData = ctx.createImageData(helperImageData);
checkImageData(canvasColorSettings, imageData);
}
var testScenariosCreateImageData = [
["Test color managed cretateImageData: {srgb, uint8} -> {srgb, uint8}",
{colorSpace: "srgb", pixelFormat: "uint8"}],
["Test color managed cretateImageData: {srgb, float16} -> {srgb, float32}",
{colorSpace: "srgb", pixelFormat: "float16"}],
];
function runCreateImageDataTests() {
for (var i = 0; i < testScenariosCreateImageData.length; i++){
var t = test(function() {
runTestCreateImageData(testScenariosCreateImageData[i][1]);
}, testScenariosCreateImageData[i][0]);
}
}
runCreateImageDataTests();
// Test getImageData when the canvas is color managed
function runTestGetImageData(canvasColorSettings) {
var aCanvas = document.createElement("canvas");
aCanvas.width = xWidth;
aCanvas.height = xHeight;
var ctx = aCanvas.getContext('2d', canvasColorSettings);
var imageData = ctx.getImageData(0, 0, xWidth, xHeight);
checkImageData(canvasColorSettings, imageData);
}
var testScenariosGetImageData = [
["Test color managed getImageData: {srgb, uint8} -> {srgb, uint8}",
{colorSpace: "srgb", pixelFormat: "uint8"}],
["Test color managed getImageData: {srgb, float16} -> {srgb, float32}",
{colorSpace: "srgb", pixelFormat: "float16"}],
];
function runGetImageDataTests() {
for (var i = 0; i < testScenariosGetImageData.length; i++){
var t = test(function() {
runTestGetImageData(testScenariosGetImageData[i][1]);
}, testScenariosGetImageData[i][0]);
}
}
runGetImageDataTests();
// Test putImageData when the canvas is color managed.
var dataU8 = new Uint8ClampedArray(4 * xWidth * xHeight);
var dataU16 = new Uint16Array(4 * xWidth * xHeight);
var dataF32 = new Float32Array(4 * xWidth * xHeight);
function prepareDataArrays() {
for (i = 0; i < 4 * xWidth * xHeight; i++) {
dataU8[i] = (i % 4 == 3) ? 255 : i % 256;
dataU16[i] = dataU8[i] * 257;
dataF32[i] = dataU8[i] / 255.0;
}
}
var testScenariosPutImageData = [];
function prepareTestScenariosPutImageData() {
var colorSpaces = ["srgb"];
var imageDataStorageFormats = ["uint8", "uint16", "float32"];
var canvasPixelFormats = ["uint8", "float16"];
for (i = 0; i < colorSpaces.length; i++)
for (j = 0; j < imageDataStorageFormats.length; j++)
for (k = 0; k < colorSpaces.length; k++)
for (l = 0; l < canvasPixelFormats.length; l++) {
testTitle = "Test color managed putImageData: ".concat(
"{", colorSpaces[i], ", ", imageDataStorageFormats[j], "} -> {", colorSpaces[k],
", ", canvasPixelFormats[l], "}");
imageDataColorSettings =
{colorSpace: colorSpaces[i], storageFormat: imageDataStorageFormats[j]};
canvasColorSettings =
{colorSpace: colorSpaces[k], pixelFormat: canvasPixelFormats[l]};
testScenariosPutImageData.push([testTitle, imageDataColorSettings, canvasColorSettings]);
}
}
function createAndPutImageData(data, imageDataColorSettings, canvasColorSettings) {
// create color managed canvas
var aCanvas = document.createElement("canvas");
aCanvas.width = xWidth;
aCanvas.height = xHeight;
var ctx = aCanvas.getContext('2d', canvasColorSettings);
// create color managed ImageData
var imageData = ctx.createImageData(data, xWidth, xHeight, imageDataColorSettings);
// put image data into canvas. test succeeds if this does not crash.
ctx.putImageData(imageData, 0, 0);
}
function runTestPutImageData(imageDataColorSettings, canvasColorSettings) {
createAndPutImageData(dataU8, imageDataColorSettings, canvasColorSettings);
createAndPutImageData(dataU16, imageDataColorSettings, canvasColorSettings);
createAndPutImageData(dataF32, imageDataColorSettings, canvasColorSettings);
}
prepareDataArrays();
prepareTestScenariosPutImageData();
function runPutImageDataTests() {
for (var i = 0; i < testScenariosPutImageData.length; i++){
var t = test(function() {
runTestPutImageData(testScenariosPutImageData[i][1]);
}, testScenariosPutImageData[i][0]);
}
}
runPutImageDataTests();
</script>
</body>