// DO NOT EDIT! This test has been generated by tools/gentest.py.
// OffscreenCanvas test in a worker:2d.imageData.get.nonpremul
// Description:getImageData() returns non-premultiplied colours
// Note:

importScripts("/resources/testharness.js");
importScripts("/common/canvas-tests.js");

var t = async_test("getImageData() returns non-premultiplied colours");
t.step(function() {

var offscreenCanvas = new OffscreenCanvas(100, 50);
var ctx = offscreenCanvas.getContext('2d');

ctx.fillStyle = 'rgba(255, 255, 255, 0.5)';
ctx.fillRect(0, 0, 100, 50);
var imgdata = ctx.getImageData(10, 10, 10, 10);
_assert(imgdata.data[0] > 200, "imgdata.data[\""+(0)+"\"] > 200");
_assert(imgdata.data[1] > 200, "imgdata.data[\""+(1)+"\"] > 200");
_assert(imgdata.data[2] > 200, "imgdata.data[\""+(2)+"\"] > 200");
_assert(imgdata.data[3] > 100, "imgdata.data[\""+(3)+"\"] > 100");
_assert(imgdata.data[3] < 200, "imgdata.data[\""+(3)+"\"] < 200");

t.done();

});
done();
