<!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("Series of tests to ensure correct results of isPointInStroke with Path2D argument.");

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

ctx.strokeStyle = '#0ff';

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

shouldBeTrue("ctx.isPointInStroke(path,20,20)");
shouldBeTrue("ctx.isPointInStroke(path,120,20)");
shouldBeTrue("ctx.isPointInStroke(path,20,120)");
shouldBeTrue("ctx.isPointInStroke(path,120,120)");
shouldBeTrue("ctx.isPointInStroke(path,70,20)");
shouldBeTrue("ctx.isPointInStroke(path,20,70)");
shouldBeTrue("ctx.isPointInStroke(path,120,70)");
shouldBeTrue("ctx.isPointInStroke(path,70,120)");
shouldBeFalse("ctx.isPointInStroke(path,22,22)");
shouldBeFalse("ctx.isPointInStroke(path,118,22)");
shouldBeFalse("ctx.isPointInStroke(path,22,118)");
shouldBeFalse("ctx.isPointInStroke(path,118,118)");
shouldBeFalse("ctx.isPointInStroke(path,70,18)");
shouldBeFalse("ctx.isPointInStroke(path,122,70)");
shouldBeFalse("ctx.isPointInStroke(path,70,122)");
shouldBeFalse("ctx.isPointInStroke(path,18,70)");
shouldBeFalse("ctx.isPointInStroke(path,NaN,122)");
shouldBeFalse("ctx.isPointInStroke(path,18,NaN)");

shouldThrow("ctx.isPointInStroke(null,70,20)");
shouldThrow("ctx.isPointInStroke([],20,70)");
shouldThrow("ctx.isPointInStroke({},120,70)");
shouldThrow("ctx.isPointInPath('path2d', 50, 50)");
shouldThrow("ctx.isPointInPath(undefined, 50, 50)");
shouldThrow("ctx.isPointInPath(Number.MAX_VALUE, 50, 50)");
shouldThrow("ctx.isPointInPath(function() {}, 50, 50)");
shouldThrow("ctx.isPointInPath(false, 50, 50)");
shouldThrow("ctx.isPointInPath(new Date(), 50, 50)");

ctx.lineWidth = 10;
shouldBeTrue("ctx.isPointInStroke(path,22,22)");
shouldBeTrue("ctx.isPointInStroke(path,118,22)");
shouldBeTrue("ctx.isPointInStroke(path,22,118)");
shouldBeTrue("ctx.isPointInStroke(path,118,118)");
shouldBeTrue("ctx.isPointInStroke(path,70,18)");
shouldBeTrue("ctx.isPointInStroke(path,122,70)");
shouldBeTrue("ctx.isPointInStroke(path,70,122)");
shouldBeTrue("ctx.isPointInStroke(path,18,70)");
shouldBeFalse("ctx.isPointInStroke(path,26,70)");
shouldBeFalse("ctx.isPointInStroke(path,70,26)");
shouldBeFalse("ctx.isPointInStroke(path,70,114)");
shouldBeFalse("ctx.isPointInStroke(path,114,70)");

path = new Path2D();
path.moveTo(10,10);
path.lineTo(110,20);
path.lineTo(10,30);
ctx.lineJoin = "bevel";
shouldBeFalse("ctx.isPointInStroke(path,113,20)");

ctx.miterLimit = 40.0;
ctx.lineJoin = "miter";
shouldBeTrue("ctx.isPointInStroke(path,113,20)");

ctx.miterLimit = 2.0;
shouldBeFalse("ctx.isPointInStroke(path,113,20)");

path = new Path2D();
path.moveTo(10,10);
path.lineTo(110,10);
ctx.lineCap = "butt";
shouldBeFalse("ctx.isPointInStroke(path,112,10)");

ctx.lineCap = "round";
shouldBeTrue("ctx.isPointInStroke(path,112,10)");
shouldBeFalse("ctx.isPointInStroke(path,117,10)");

ctx.lineCap = "square";
shouldBeTrue("ctx.isPointInStroke(path,112,10)");
shouldBeFalse("ctx.isPointInStroke(path,117,10)");

ctx.lineCap = "butt";
ctx.setLineDash([10,10]);
shouldBeTrue("ctx.isPointInStroke(path,15,10)");
shouldBeFalse("ctx.isPointInStroke(path,25,10)");
shouldBeTrue("ctx.isPointInStroke(path,35,10)");

ctx.lineDashOffset = 10;
shouldBeFalse("ctx.isPointInStroke(path,15,10)");
shouldBeTrue("ctx.isPointInStroke(path,25,10)");
shouldBeFalse("ctx.isPointInStroke(path,35,10)");</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
