<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<script>
description("Ensure correct behavior of canvas with strokePath using a gradient strokeStyle and a shadow");

function print(message, color)
{
    var paragraph = document.createElement("div");
    paragraph.appendChild(document.createTextNode(message));
    paragraph.style.fontFamily = "monospace";
    if (color)
        paragraph.style.color = color;
    document.getElementById("console").appendChild(paragraph);
}

function shouldBeAround(a, b)
{
    var evalA;
    try {
        evalA = eval(a);
    } catch(e) {
        evalA = e;
    }

    if (Math.abs(evalA - b) < 15)
        print("PASS " + a + " is around " + b , "green")
    else
        print("FAIL " + a + " is not around " + b + " (actual: " + evalA + ")", "red");
}

var canvas = document.createElement('canvas');
document.body.appendChild(canvas);
canvas.setAttribute('width', '600');
canvas.setAttribute('height', '1100');
var ctx = canvas.getContext('2d');

var gradient = ctx.createLinearGradient(0, 0, 300, 0);
gradient.addColorStop(0, 'rgba(0, 0, 255, 0.5)');
gradient.addColorStop(1, 'rgba(0, 0, 255, 0.5)');

ctx.save();
ctx.strokeStyle = gradient;
ctx.shadowColor = 'rgba(255, 0, 0, 0.5)';
ctx.shadowOffsetX = 250;
ctx.lineWidth = 25;

var side = 200;

// Alpha shadow.
ctx.shadowBlur = 0;
ctx.beginPath();
ctx.rect(50, 50, side, side);
ctx.stroke();

// Blurry shadow.
ctx.shadowBlur = 10;
ctx.beginPath();
ctx.rect(50, 300, side, side);
ctx.stroke();

ctx.rotate(Math.PI / 2);

// Rotated alpha shadow.
ctx.shadowBlur = 0;
ctx.beginPath();
ctx.rect(550, -250, side, side);
ctx.stroke();

// Rotated blurry shadow.
ctx.shadowBlur = 10;
ctx.beginPath();
ctx.rect(800, -250, side, side);
ctx.stroke();

ctx.restore();

var imageData, data;
ctx.fillStyle = 'black';

function test(alphaTestFunction, x, y, r, g, b, a) {
    // Get pixel.
    imageData = ctx.getImageData(x, y, 1, 1);
    data = imageData.data;
    // Test pixel color components.
    shouldBe('data[0]', r+'');
    shouldBe('data[1]', g+'');
    shouldBe('data[2]', b+'');
    alphaTestFunction('data[3]', a+'');
    // Plot test point.
    ctx.fillRect(x, y, 3, 3);
}

print('Verifying alpha shadow...');
test(shouldBe, 400, 150, 0, 0, 0, 0);

test(shouldBe, 400, 75,  0, 0, 0, 0);
test(shouldBe, 400, 225, 0, 0, 0, 0);
test(shouldBe, 325, 150, 0, 0, 0, 0);
test(shouldBe, 475, 150, 0, 0, 0, 0);

test(shouldBeAround, 400,  50, 255, 0, 0, 64);
test(shouldBeAround, 500, 150, 255, 0, 0, 64);
test(shouldBeAround, 400, 250, 255, 0, 0, 64);
test(shouldBeAround, 300, 150, 255, 0, 0, 64);

test(shouldBe, 400, 25,  0, 0, 0, 0);
test(shouldBe, 525, 150, 0, 0, 0, 0);
test(shouldBe, 400, 275, 0, 0, 0, 0);
test(shouldBe, 275, 150, 0, 0, 0, 0);

print(' ');
print('Verifying blurry shadow...');
test(shouldBe, 400, 400, 0, 0, 0, 0);

test(shouldBe, 400, 325, 0, 0, 0, 0);
test(shouldBe, 475, 400, 0, 0, 0, 0);
test(shouldBe, 400, 475, 0, 0, 0, 0);
test(shouldBe, 325, 400, 0, 0, 0, 0);

test(shouldBeAround, 400, 300, 255, 0, 0, 64);
test(shouldBeAround, 400, 500, 255, 0, 0, 64);
test(shouldBeAround, 300, 400, 255, 0, 0, 64);
test(shouldBeAround, 500, 400, 255, 0, 0, 64);

test(shouldBe, 525, 400, 0, 0, 0, 0);
test(shouldBe, 275, 400, 0, 0, 0, 0);

print(' ');
print('Verifying rotated alpha shadow...');
test(shouldBe, 400, 650, 0, 0, 0, 0);

test(shouldBe, 400, 575, 0, 0, 0, 0);
test(shouldBe, 400, 725, 0, 0, 0, 0);
test(shouldBe, 325, 650, 0, 0, 0, 0);
test(shouldBe, 475, 650, 0, 0, 0, 0);

test(shouldBeAround, 400, 550, 255, 0, 0, 64);
test(shouldBeAround, 500, 650, 255, 0, 0, 64);
test(shouldBeAround, 400, 750, 255, 0, 0, 64);
test(shouldBeAround, 300, 650, 255, 0, 0, 64);

test(shouldBe, 400, 525, 0, 0, 0, 0);
test(shouldBe, 525, 650, 0, 0, 0, 0);
test(shouldBe, 400, 775, 0, 0, 0, 0);
test(shouldBe, 275, 650, 0, 0, 0, 0);

print(' ');
print('Verifying rotated blurry shadow...');
test(shouldBe, 400, 900, 0, 0, 0, 0);

test(shouldBe, 400, 825, 0, 0, 0, 0);
test(shouldBe, 475, 900, 0, 0, 0, 0);
test(shouldBe, 400, 975, 0, 0, 0, 0);
test(shouldBe, 325, 900, 0, 0, 0, 0);

test(shouldBeAround, 400, 800,  255, 0, 0, 64);
test(shouldBeAround, 400, 1000, 255, 0, 0, 64);
test(shouldBeAround, 300, 900,  255, 0, 0, 64);
test(shouldBeAround, 500, 900,  255, 0, 0, 64);

test(shouldBe, 525, 900,  0, 0, 0, 0);
test(shouldBe, 275, 900,  0, 0, 0, 0);
test(shouldBe, 400, 1025, 0, 0, 0, 0);

print(' ');
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
