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

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

var t = async_test("getImageData() returns non-premultiplied colours");
var t_pass = t.done.bind(t);
var t_fail = t.step_func(function(reason) {
    throw reason;
});
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();
