1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
description("Test the behavior of isPointInStroke in Canvas with path object");
var ctx = document.createElement('canvas').getContext('2d');
document.body.appendChild(ctx.canvas);
ctx.strokeStyle = '#0ff';
// Create new path.
var path = new Path2D();
path.rect(20,20,100,100);
debug("Initial behavior: lineWidth = 1.0")
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)");
debug("");
debug("Check invalid type");
shouldThrow("ctx.isPointInStroke(null,70,20)");
shouldThrow("ctx.isPointInStroke(undefined,70,20)");
shouldThrow("ctx.isPointInStroke([],20,70)");
shouldThrow("ctx.isPointInStroke({},120,70)");
debug("");
debug("Set lineWidth = 10.0");
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)");
debug("");
debug("Check lineJoin = 'bevel'");
path = new Path2D();
path.moveTo(10,10);
path.lineTo(110,20);
path.lineTo(10,30);
ctx.lineJoin = "bevel";
shouldBeFalse("ctx.isPointInStroke(path,113,20)");
debug("");
debug("Check lineJoin = 'miter'");
ctx.miterLimit = 40.0;
ctx.lineJoin = "miter";
shouldBeTrue("ctx.isPointInStroke(path,113,20)");
debug("");
debug("Check miterLimit = 2.0");
ctx.miterLimit = 2.0;
shouldBeFalse("ctx.isPointInStroke(path,113,20)");
debug("");
debug("Check lineCap = 'butt'");
path = new Path2D();
path.moveTo(10,10);
path.lineTo(110,10);
ctx.lineCap = "butt";
shouldBeFalse("ctx.isPointInStroke(path,112,10)");
debug("");
debug("Check lineCap = 'round'");
ctx.lineCap = "round";
shouldBeTrue("ctx.isPointInStroke(path,112,10)");
shouldBeFalse("ctx.isPointInStroke(path,117,10)");
debug("");
debug("Check lineCap = 'square'");
ctx.lineCap = "square";
shouldBeTrue("ctx.isPointInStroke(path,112,10)");
shouldBeFalse("ctx.isPointInStroke(path,117,10)");
debug("");
debug("Check setLineDash([10,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)");
debug("");
debug("Check dashOffset = 10");
ctx.lineDashOffset = 10;
shouldBeFalse("ctx.isPointInStroke(path,15,10)");
shouldBeTrue("ctx.isPointInStroke(path,25,10)");
shouldBeFalse("ctx.isPointInStroke(path,35,10)");
|