<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<canvas id="canvas" width="200" height="200"></canvas>
<script>
description('Test Path2D as argument for stroke.');

function areaColor(data, refColor) {
    if (!data.length)
        return true;
    var c = {r:0,g:0,b:0,a:0};
    for (var i = 0; i < data.length; i += 4) {
        c.r += data[i];
        c.g += data[i+1];
        c.b += data[i+2];
        c.a += data[i+3];
    }
    if (refColor.r == Math.round(c.r/data.length*4)
        && refColor.g == Math.round(c.g/data.length*4)
        && refColor.b == Math.round(c.b/data.length*4)
        && refColor.a == Math.round(c.a/data.length*4))
        return true;
    return false;
}

var ctx = document.createElement('canvas').getContext('2d');
document.body.appendChild(ctx.canvas);

var path = new Path2D();
path.rect(0,0,100,100);

debug('Simple test of Path2D as argumeny for stroke().');
ctx.strokeStyle = 'rgb(0,255,0)';
ctx.lineWidth = 20;
ctx.stroke(path);
var imageData = ctx.getImageData(0, 0, 10, 10);
shouldBe('areaColor(imageData.data, {r:0,g:255,b:0,a:255})', 'true');
imageData = ctx.getImageData(90, 90, 20, 20);
shouldBe('areaColor(imageData.data, {r:0,g:255,b:0,a:255})', 'true');
debug('');

ctx.clearRect(0,0,300,150);
debug('Transform context and apply stroke(). Context path should be ignored.');
ctx.save()
ctx.scale(2,2);
ctx.translate(50,50);
ctx.beginPath();
ctx.rect(-100,-100,100,100); // Ignore this path.
ctx.stroke(path);
ctx.restore();
imageData = ctx.getImageData(80, 80, 40, 40);
shouldBe('areaColor(imageData.data, {r:0,g:255,b:0,a:255})', 'true');
imageData = ctx.getImageData(280, 130, 20, 20);
shouldBe('areaColor(imageData.data, {r:0,g:255,b:0,a:255})', 'true');
debug('');

ctx.clearRect(0,0,300,150);
debug('Path2D should not affect context path.');
ctx.beginPath();
ctx.rect(100,100,50,50);
ctx.stroke(path);
imageData = ctx.getImageData(0, 0, 10, 10);
shouldBe('areaColor(imageData.data, {r:0,g:255,b:0,a:255})', 'true');
imageData = ctx.getImageData(90, 90, 20, 20);
shouldBe('areaColor(imageData.data, {r:0,g:255,b:0,a:255})', 'true');
ctx.clearRect(0,0,300,150);
ctx.stroke();
imageData = ctx.getImageData(90, 90, 20, 20);
shouldBe('areaColor(imageData.data, {r:0,g:255,b:0,a:255})', 'true');
imageData = ctx.getImageData(140, 140, 20, 10);
shouldBe('areaColor(imageData.data, {r:0,g:255,b:0,a:255})', 'true');
debug('');

shouldThrow("ctx.stroke(0)");
shouldThrow("ctx.stroke(null)");
shouldThrow("ctx.stroke('path2d')");
shouldThrow("ctx.stroke(undefined)");
shouldThrow("ctx.stroke(Number.MAX_VALUE)");
shouldThrow("ctx.stroke(function() {})");
shouldThrow("ctx.stroke(false)");
shouldThrow("ctx.stroke(new Date())");
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
