blob: 7a151204421e28af53f28ce8f1d9f0775b0bcb5a [file] [log] [blame]
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script>
test(function(){
ctx = document.createElement("canvas").getContext("2d");
ctx.save();
// Rectangle at (0,0) 20x20
ctx.rect(0, 0, 20, 20);
assert_true(ctx.isPointInPath(5, 5));
assert_true(ctx.isPointInPath(10, 10));
assert_true(ctx.isPointInPath(19, 19));
assert_false(ctx.isPointInPath(30, 30));
assert_false(ctx.isPointInPath(-1, 10));
assert_false(ctx.isPointInPath(10, -1));
// Translate context (10,10)
ctx.translate(10,10);
assert_true(ctx.isPointInPath(5, 5));
assert_true(ctx.isPointInPath(10, 10));
assert_true(ctx.isPointInPath(19, 19));
assert_false(ctx.isPointInPath(30, 30));
assert_false(ctx.isPointInPath(-1, 10));
assert_false(ctx.isPointInPath(10, -1));
// Collapse ctm to non-invertible matrix
ctx.scale(0,0);
assert_false(ctx.isPointInPath(5, 5));
assert_false(ctx.isPointInPath(10, 10));
assert_false(ctx.isPointInPath(20, 20));
assert_false(ctx.isPointInPath(30, 30));
assert_false(ctx.isPointInPath(-1, 10));
assert_false(ctx.isPointInPath(10, -1));
// Resetting context to a clean state
ctx.restore();
ctx.save();
ctx.beginPath();
// Translate context (10,10)
ctx.translate(10,10);
// Rectangle at (0,0) 20x20
ctx.rect(0, 0, 20, 20);
assert_false(ctx.isPointInPath(5, 5));
assert_true(ctx.isPointInPath(10, 10));
assert_true(ctx.isPointInPath(20, 20));
assert_true(ctx.isPointInPath(29, 29));
assert_false(ctx.isPointInPath(-1, 10));
assert_false(ctx.isPointInPath(10, -1));
ctx.restore();
ctx.save();
ctx.beginPath();
// Translate context (10,20)
ctx.translate(10,20);
// Transform context (1, 0, 0, -1, 0, 0)
ctx.transform(1, 0, 0, -1, 0, 0);
// Rectangle at (0,0) 20x20
ctx.rect(0, 0, 20, 20);
// After the flip, rect is actually 10, 0, 20, 20
assert_false(ctx.isPointInPath(5, 5));
assert_true(ctx.isPointInPath(10, 0));
assert_true(ctx.isPointInPath(29, 0));
assert_true(ctx.isPointInPath(10, 19));
assert_true(ctx.isPointInPath(21, 10));
assert_true(ctx.isPointInPath(29, 19));
ctx.strokeStyle = 'green';
ctx.stroke();
ctx.restore();
}, "Series of tests for Canvas.isPointInPath");
</script>