chromium/third_party/blink/web_tests/fast/canvas/canvas-path-addpath.html

<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<body>
<script>
test(function(t) {
    var canvas = document.createElement('canvas');
    var ctx = canvas.getContext('2d');

    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.beginPath();
    var p1 = new Path2D();
    p1.rect(0,0,100,100);
    var p2 = new Path2D();
    p2.rect(0,100,100,100);
    var m = new DOMMatrix();
    p1.addPath(p2, m);
    ctx.fillStyle = 'yellow';
    ctx.fill(p1);
    assert_array_equals(ctx.getImageData(1, 100, 1, 1).data, [255, 255, 0, 255]);

    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.beginPath();
    var p3 = new Path2D();
    p3.rect(0,0,100,100);
    var p4 = new Path2D();
    p4.rect(0,100,100,100);
    m.a = 1; m.b = 0;
    m.c = 0; m.d = 1;
    m.e = 100; m.f = -100;
    p3.addPath(p4, m);
    ctx.fillStyle = 'yellow';
    ctx.fill(p3);
    assert_array_equals(ctx.getImageData(101, 0, 1, 1).data, [255, 255, 0, 255]);

    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.beginPath();
    var p5 = new Path2D();
    p5.rect(0,0,100,100);
    var p6 = new Path2D();
    p6.rect(100,100,100,100);
    m.a = 0; m.b = 0;
    m.c = 0; m.d = 0;
    m.e = 0; m.f = 0;
    p5.addPath(p6, m);
    ctx.fillStyle = 'yellow';
    ctx.fill(p5);
    assert_array_equals(ctx.getImageData(101, 100, 1, 1).data, [0, 0, 0, 0]);

    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.beginPath();
    var p7 = new Path2D();
    p7.rect(0,0,100,100);
    var p8 = new Path2D();
    p8.rect(100,100,100,100);
    p7.addPath(p8, null);
    p7.addPath(p8, []);
    p7.addPath(p8, {});
    ctx.fillStyle = 'red';
    ctx.fill(p7);
    assert_array_equals(ctx.getImageData(101, 100, 1, 1).data, [255, 0, 0, 255]);

    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.beginPath();
    var p9 = new Path2D();
    var p10 = new Path2D();
    p9.rect(0,0,10,10);
    p10.addPath(p9);
    ctx.fillStyle = 'red';
    ctx.fill(p10);
    assert_array_equals(ctx.getImageData(1, 1, 1, 1).data, [255, 0, 0, 255]);

    var p9 = new Path2D();
    p9.rect(0,0,100,100);
    assert_throws_js(TypeError, function() {
      p7.addPath(null, m);
    });
    assert_throws_js(TypeError, function() {
      p7.addPath([], m);
    });
    assert_throws_js(TypeError, function() {
      p7.addPath({}, m);
    });
}, "Test addPath() method.");
</script>
</body>