description("Series of tests for Canvas.isPointInPath"); ctx = document.getElementById("canvas").getContext("2d"); ctx.save(); debug("Rectangle at (0,0) 20x20"); ctx.rect(0, 0, 20, 20); shouldBe("ctx.isPointInPath(5, 5)", "true"); shouldBe("ctx.isPointInPath(10, 10)", "true"); shouldBe("ctx.isPointInPath(19, 19)", "true"); shouldBe("ctx.isPointInPath(30, 30)", "false"); shouldBe("ctx.isPointInPath(-1, 10)", "false"); shouldBe("ctx.isPointInPath(10, -1)", "false"); debug("Translate context (10,10)"); ctx.translate(10,10); shouldBe("ctx.isPointInPath(5, 5)", "true"); shouldBe("ctx.isPointInPath(10, 10)", "true"); shouldBe("ctx.isPointInPath(19, 19)", "true"); shouldBe("ctx.isPointInPath(30, 30)", "false"); shouldBe("ctx.isPointInPath(-1, 10)", "false"); shouldBe("ctx.isPointInPath(10, -1)", "false"); debug("Collapse ctm to non-invertible matrix"); ctx.scale(0,0); shouldBe("ctx.isPointInPath(5, 5)", "false"); shouldBe("ctx.isPointInPath(10, 10)", "false"); shouldBe("ctx.isPointInPath(20, 20)", "false"); shouldBe("ctx.isPointInPath(30, 30)", "false"); shouldBe("ctx.isPointInPath(-1, 10)", "false"); shouldBe("ctx.isPointInPath(10, -1)", "false"); debug("Resetting context to a clean state"); ctx.restore(); ctx.save(); ctx.beginPath(); debug("Translate context (10,10)"); ctx.translate(10,10); debug("Rectangle at (0,0) 20x20"); ctx.rect(0, 0, 20, 20); shouldBe("ctx.isPointInPath(5, 5)", "false"); shouldBe("ctx.isPointInPath(10, 10)", "true"); shouldBe("ctx.isPointInPath(20, 20)", "true"); shouldBe("ctx.isPointInPath(29, 29)", "true"); shouldBe("ctx.isPointInPath(-1, 10)", "false"); shouldBe("ctx.isPointInPath(10, -1)", "false"); ctx.restore(); ctx.save(); ctx.beginPath(); debug("Translate context (10,20)"); ctx.translate(10,20); debug("Transform context (1, 0, 0, -1, 0, 0)"); ctx.transform(1, 0, 0, -1, 0, 0); debug("Rectangle at (0,0) 20x20"); ctx.rect(0, 0, 20, 20); // After the flip, rect is actually 10, 0, 20, 20 shouldBe("ctx.isPointInPath(5, 5)", "false"); shouldBe("ctx.isPointInPath(10, 0)", "true"); shouldBe("ctx.isPointInPath(29, 0)", "true"); shouldBe("ctx.isPointInPath(10, 19)", "true"); shouldBe("ctx.isPointInPath(21, 10)", "true"); shouldBe("ctx.isPointInPath(29, 19)", "true"); ctx.strokeStyle = 'green'; ctx.stroke(); ctx.restore();