Index: LayoutTests/fast/canvas/script-tests/canvas-isPointInStroke-with-path.js |
diff --git a/LayoutTests/fast/canvas/script-tests/canvas-isPointInStroke-with-path.js b/LayoutTests/fast/canvas/script-tests/canvas-isPointInStroke-with-path.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..162749b323d13bedf9b3c956c2052855ed6b9039 |
--- /dev/null |
+++ b/LayoutTests/fast/canvas/script-tests/canvas-isPointInStroke-with-path.js |
@@ -0,0 +1,107 @@ |
+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 Path(); |
+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 null and invalid type"); |
+shouldThrow("ctx.isPointInStroke(null,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 Path(); |
+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 Path(); |
+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)"); |