<!doctype html>
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<script>
description("Test the behavior of isPointInStroke in Canvas");
var ctx = document.createElement('canvas').getContext('2d');

document.body.appendChild(ctx.canvas);

ctx.strokeStyle = '#0ff';

// Create new path.
ctx.beginPath();
ctx.rect(20,20,100,100);

debug("Initial behavior: lineWith = 1.0")
shouldBeTrue("ctx.isPointInStroke(20,20)");
shouldBeTrue("ctx.isPointInStroke(120,20)");
shouldBeTrue("ctx.isPointInStroke(20,120)");
shouldBeTrue("ctx.isPointInStroke(120,120)");
shouldBeTrue("ctx.isPointInStroke(70,20)");
shouldBeTrue("ctx.isPointInStroke(20,70)");
shouldBeTrue("ctx.isPointInStroke(120,70)");
shouldBeTrue("ctx.isPointInStroke(70,120)");
shouldBeFalse("ctx.isPointInStroke(22,22)");
shouldBeFalse("ctx.isPointInStroke(118,22)");
shouldBeFalse("ctx.isPointInStroke(22,118)");
shouldBeFalse("ctx.isPointInStroke(118,118)");
shouldBeFalse("ctx.isPointInStroke(70,18)");
shouldBeFalse("ctx.isPointInStroke(122,70)");
shouldBeFalse("ctx.isPointInStroke(70,122)");
shouldBeFalse("ctx.isPointInStroke(18,70)");
debug("");

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

debug("Check lineJoin = 'bevel'");
ctx.beginPath();
ctx.moveTo(10,10);
ctx.lineTo(110,20);
ctx.lineTo(10,30);
ctx.lineJoin = "bevel";
shouldBeFalse("ctx.isPointInStroke(113,20)");
debug("");

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

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

debug("Check lineCap = 'butt'");
ctx.beginPath();
ctx.moveTo(10,10);
ctx.lineTo(110,10);
ctx.lineCap = "butt";
shouldBeFalse("ctx.isPointInStroke(112,10)");
debug("");

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

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

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

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