Test files: 723; Total subtests: 728
Test | Ch45 | FF40 | IE11 | Op12 | Sa07 | UC10 |
---|---|---|---|---|---|---|
/2dcontext/compositing/2d.composite.canvas.copy.html | OK | OK | OK | OK | OK | ERROR |
Canvas test: 2d.composite.canvas.copy | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.canvas.destination-atop.html | OK | OK | OK | OK | OK | ERROR |
Canvas test: 2d.composite.canvas.destination-atop | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.canvas.destination-in.html | OK | OK | OK | OK | OK | ERROR |
Canvas test: 2d.composite.canvas.destination-in | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.canvas.destination-out.html | OK | OK | OK | OK | OK | ERROR |
Canvas test: 2d.composite.canvas.destination-out | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.canvas.destination-over.html | OK | OK | OK | OK | OK | ERROR |
Canvas test: 2d.composite.canvas.destination-over | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.canvas.lighter.html | OK | OK | OK | OK | OK | ERROR |
Canvas test: 2d.composite.canvas.lighter | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.canvas.source-atop.html | OK | OK | OK | OK | OK | ERROR |
Canvas test: 2d.composite.canvas.source-atop | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.canvas.source-in.html | OK | OK | OK | OK | OK | ERROR |
Canvas test: 2d.composite.canvas.source-in | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.canvas.source-out.html | OK | OK | OK | OK | OK | ERROR |
Canvas test: 2d.composite.canvas.source-out | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.canvas.source-over.html | OK | OK | OK | OK | OK | ERROR |
Canvas test: 2d.composite.canvas.source-over | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.canvas.xor.html | OK | OK | OK | OK | OK | ERROR |
Canvas test: 2d.composite.canvas.xor | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.clip.copy.html | OK | OK | OK | OK | OK | ERROR |
fill() does not affect pixels outside the clip region. | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.clip.destination-atop.html | OK | OK | OK | OK | OK | ERROR |
fill() does not affect pixels outside the clip region. | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.clip.destination-in.html | OK | OK | OK | OK | OK | ERROR |
fill() does not affect pixels outside the clip region. | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.clip.destination-out.html | OK | OK | OK | OK | OK | ERROR |
fill() does not affect pixels outside the clip region. | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.clip.destination-over.html | OK | OK | OK | OK | OK | ERROR |
fill() does not affect pixels outside the clip region. | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.clip.lighter.html | OK | OK | OK | OK | OK | ERROR |
fill() does not affect pixels outside the clip region. | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.clip.source-atop.html | OK | OK | OK | OK | OK | ERROR |
fill() does not affect pixels outside the clip region. | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.clip.source-in.html | OK | OK | OK | OK | OK | ERROR |
fill() does not affect pixels outside the clip region. | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.clip.source-out.html | OK | OK | OK | OK | OK | ERROR |
fill() does not affect pixels outside the clip region. | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.clip.source-over.html | OK | OK | OK | OK | OK | ERROR |
fill() does not affect pixels outside the clip region. | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.clip.xor.html | OK | OK | OK | OK | OK | ERROR |
fill() does not affect pixels outside the clip region. | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.globalAlpha.canvas.html | OK | OK | OK | OK | OK | ERROR |
Canvas test: 2d.composite.globalAlpha.canvas | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.globalAlpha.canvaspattern.html | OK | OK | OK | OK | OK | ERROR |
Canvas test: 2d.composite.globalAlpha.canvaspattern | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.globalAlpha.default.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.composite.globalAlpha.default | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.globalAlpha.fill.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.composite.globalAlpha.fill | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.globalAlpha.image.html | OK | OK | OK | OK | OK | ERROR |
Canvas test: 2d.composite.globalAlpha.image | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.globalAlpha.imagepattern.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.composite.globalAlpha.imagepattern | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.globalAlpha.invalid.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.composite.globalAlpha.invalid | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.globalAlpha.range.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.composite.globalAlpha.range | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.image.copy.html | OK | OK | OK | OK | OK | ERROR |
Canvas test: 2d.composite.image.copy | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.image.destination-atop.html | OK | OK | OK | OK | OK | ERROR |
Canvas test: 2d.composite.image.destination-atop | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.image.destination-in.html | OK | OK | OK | OK | OK | ERROR |
Canvas test: 2d.composite.image.destination-in | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.image.destination-out.html | OK | OK | OK | OK | OK | ERROR |
Canvas test: 2d.composite.image.destination-out | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.image.destination-over.html | OK | OK | OK | OK | OK | ERROR |
Canvas test: 2d.composite.image.destination-over | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.image.lighter.html | OK | OK | OK | OK | OK | ERROR |
Canvas test: 2d.composite.image.lighter | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.image.source-atop.html | OK | OK | OK | OK | OK | ERROR |
Canvas test: 2d.composite.image.source-atop | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.image.source-in.html | OK | OK | OK | OK | OK | ERROR |
Canvas test: 2d.composite.image.source-in | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.image.source-out.html | OK | OK | OK | OK | OK | ERROR |
Canvas test: 2d.composite.image.source-out | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.image.source-over.html | OK | OK | OK | OK | OK | ERROR |
Canvas test: 2d.composite.image.source-over | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.image.xor.html | OK | OK | OK | OK | OK | ERROR |
Canvas test: 2d.composite.image.xor | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.operation.casesensitive.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.composite.operation.casesensitive | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.operation.clear.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.composite.operation.clear | FAIL | PASS | PASS | PASS | FAIL | FAIL |
/2dcontext/compositing/2d.composite.operation.darker.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.composite.operation.darker | FAIL | PASS | PASS | PASS | FAIL | FAIL |
/2dcontext/compositing/2d.composite.operation.default.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.composite.operation.default | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.operation.get.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.composite.operation.get | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.operation.highlight.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.composite.operation.highlight | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.operation.nullsuffix.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.composite.operation.nullsuffix | PASS | PASS | FAIL | FAIL | PASS | PASS |
/2dcontext/compositing/2d.composite.operation.over.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.composite.operation.over | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.operation.unrecognised.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.composite.operation.unrecognised | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.solid.copy.html | OK | OK | OK | OK | OK | ERROR |
Canvas test: 2d.composite.solid.copy | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.solid.destination-atop.html | OK | OK | OK | OK | OK | ERROR |
Canvas test: 2d.composite.solid.destination-atop | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.solid.destination-in.html | OK | OK | OK | OK | OK | ERROR |
Canvas test: 2d.composite.solid.destination-in | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.solid.destination-out.html | OK | OK | OK | OK | OK | ERROR |
Canvas test: 2d.composite.solid.destination-out | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.solid.destination-over.html | OK | OK | OK | OK | OK | ERROR |
Canvas test: 2d.composite.solid.destination-over | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.solid.lighter.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.composite.solid.lighter | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.solid.source-atop.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.composite.solid.source-atop | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.solid.source-in.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.composite.solid.source-in | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.solid.source-out.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.composite.solid.source-out | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.solid.source-over.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.composite.solid.source-over | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.solid.xor.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.composite.solid.xor | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.transparent.copy.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.composite.transparent.copy | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.transparent.destination-atop.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.composite.transparent.destination-atop | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.transparent.destination-in.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.composite.transparent.destination-in | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.transparent.destination-out.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.composite.transparent.destination-out | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.transparent.destination-over.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.composite.transparent.destination-over | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.transparent.lighter.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.composite.transparent.lighter | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.transparent.source-atop.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.composite.transparent.source-atop | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.transparent.source-in.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.composite.transparent.source-in | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.transparent.source-out.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.composite.transparent.source-out | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.transparent.source-over.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.composite.transparent.source-over | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.transparent.xor.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.composite.transparent.xor | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.uncovered.fill.copy.html | OK | OK | OK | OK | OK | OK |
fill() draws pixels not covered by the source object as (0,0,0,0), and does not leave the pixels unchanged. | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/compositing/2d.composite.uncovered.fill.destination-atop.html | OK | OK | OK | OK | OK | OK |
fill() draws pixels not covered by the source object as (0,0,0,0), and does not leave the pixels unchanged. | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/compositing/2d.composite.uncovered.fill.destination-in.html | OK | OK | OK | OK | OK | OK |
fill() draws pixels not covered by the source object as (0,0,0,0), and does not leave the pixels unchanged. | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/compositing/2d.composite.uncovered.fill.source-in.html | OK | OK | OK | OK | OK | OK |
fill() draws pixels not covered by the source object as (0,0,0,0), and does not leave the pixels unchanged. | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/compositing/2d.composite.uncovered.fill.source-out.html | OK | OK | OK | OK | OK | OK |
fill() draws pixels not covered by the source object as (0,0,0,0), and does not leave the pixels unchanged. | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/compositing/2d.composite.uncovered.image.copy.html | OK | OK | OK | OK | OK | OK |
drawImage() draws pixels not covered by the source object as (0,0,0,0), and does not leave the pixels unchanged. | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/compositing/2d.composite.uncovered.image.destination-atop.html | OK | OK | OK | OK | OK | OK |
drawImage() draws pixels not covered by the source object as (0,0,0,0), and does not leave the pixels unchanged. | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.uncovered.image.destination-in.html | OK | OK | OK | OK | OK | OK |
drawImage() draws pixels not covered by the source object as (0,0,0,0), and does not leave the pixels unchanged. | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.uncovered.image.source-in.html | OK | OK | OK | OK | OK | OK |
drawImage() draws pixels not covered by the source object as (0,0,0,0), and does not leave the pixels unchanged. | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.uncovered.image.source-out.html | OK | OK | OK | OK | OK | OK |
drawImage() draws pixels not covered by the source object as (0,0,0,0), and does not leave the pixels unchanged. | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.uncovered.nocontext.copy.html | OK | OK | OK | OK | OK | OK |
drawImage() of a canvas with no context draws pixels as (0,0,0,0), and does not leave the pixels unchanged. | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.uncovered.nocontext.destination-atop.html | OK | OK | OK | OK | OK | OK |
drawImage() of a canvas with no context draws pixels as (0,0,0,0), and does not leave the pixels unchanged. | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.uncovered.nocontext.destination-in.html | OK | OK | OK | OK | OK | OK |
drawImage() of a canvas with no context draws pixels as (0,0,0,0), and does not leave the pixels unchanged. | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.uncovered.nocontext.source-in.html | OK | OK | OK | OK | OK | OK |
drawImage() of a canvas with no context draws pixels as (0,0,0,0), and does not leave the pixels unchanged. | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.uncovered.nocontext.source-out.html | OK | OK | OK | OK | OK | OK |
drawImage() of a canvas with no context draws pixels as (0,0,0,0), and does not leave the pixels unchanged. | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/compositing/2d.composite.uncovered.pattern.copy.html | OK | OK | OK | OK | OK | OK |
Pattern fill() draws pixels not covered by the source object as (0,0,0,0), and does not leave the pixels unchanged. | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/compositing/2d.composite.uncovered.pattern.destination-atop.html | OK | OK | OK | OK | OK | OK |
Pattern fill() draws pixels not covered by the source object as (0,0,0,0), and does not leave the pixels unchanged. | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/compositing/2d.composite.uncovered.pattern.destination-in.html | OK | OK | OK | OK | OK | OK |
Pattern fill() draws pixels not covered by the source object as (0,0,0,0), and does not leave the pixels unchanged. | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/compositing/2d.composite.uncovered.pattern.source-in.html | OK | OK | OK | OK | OK | OK |
Pattern fill() draws pixels not covered by the source object as (0,0,0,0), and does not leave the pixels unchanged. | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/compositing/2d.composite.uncovered.pattern.source-out.html | OK | OK | OK | OK | OK | OK |
Pattern fill() draws pixels not covered by the source object as (0,0,0,0), and does not leave the pixels unchanged. | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/conformance-requirements/2d.missingargs.html | OK | OK | OK | OK | OK | OK |
Missing arguments cause TypeError | PASS | PASS | FAIL | FAIL | FAIL | FAIL |
/2dcontext/conformance-requirements/2d.type.delete.html | OK | OK | OK | OK | OK | OK |
window.CanvasRenderingContext2D is Configurable | FAIL | PASS | PASS | FAIL | PASS | FAIL |
/2dcontext/conformance-requirements/2d.voidreturn.html | OK | OK | OK | OK | OK | OK |
void methods return undefined | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.3arg.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.drawImage.3arg | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.5arg.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.drawImage.5arg | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.9arg.basic.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.drawImage.9arg.basic | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.9arg.destpos.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.drawImage.9arg.destpos | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.9arg.destsize.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.drawImage.9arg.destsize | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcepos.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.drawImage.9arg.sourcepos | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcesize.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.drawImage.9arg.sourcesize | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.alpha.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.drawImage.alpha | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.animated.apng.html | OK | OK | OK | OK | OK | OK |
drawImage() of an APNG with no poster frame draws the first frame | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.animated.gif.html | OK | OK | OK | OK | OK | OK |
drawImage() of an animated GIF draws the first frame | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.animated.poster.html | OK | OK | OK | OK | OK | OK |
drawImage() of an APNG draws the poster frame | PASS | FAIL | PASS | FAIL | PASS | PASS |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.broken.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.drawImage.broken | PASS | PASS | FAIL | PASS | FAIL | PASS |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.canvas.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.drawImage.canvas | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.clip.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.drawImage.clip | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.composite.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.drawImage.composite | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.floatsource.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.drawImage.floatsource | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.incomplete.emptysrc.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.drawImage.incomplete.emptysrc | PASS | FAIL | PASS | PASS | PASS | PASS |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.incomplete.immediate.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.drawImage.incomplete.immediate | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.incomplete.nosrc.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.drawImage.incomplete.nosrc | PASS | FAIL | PASS | PASS | PASS | PASS |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.incomplete.reload.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.drawImage.incomplete.reload | PASS | FAIL | PASS | PASS | PASS | PASS |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.incomplete.removedsrc.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.drawImage.incomplete.removedsrc | PASS | FAIL | PASS | PASS | FAIL | FAIL |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.negativedest.html | OK | OK | OK | OK | OK | OK |
Negative destination width/height represents the correct rectangle | PASS | FAIL | PASS | FAIL | PASS | PASS |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.negativedir.html | OK | OK | OK | OK | OK | OK |
Negative dimensions do not affect the direction of the image | PASS | FAIL | PASS | FAIL | PASS | PASS |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.negativesource.html | OK | OK | OK | OK | OK | OK |
Negative source width/height represents the correct rectangle | PASS | FAIL | PASS | FAIL | PASS | PASS |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.nonfinite.html | OK | OK | OK | OK | OK | OK |
drawImage() with Infinity/NaN is ignored | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.nowrap.html | OK | OK | OK | OK | OK | OK |
Stretched images do not get pixels wrapping around the edges | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.null.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.drawImage.null | PASS | PASS | FAIL | FAIL | FAIL | FAIL |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.path.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.drawImage.path | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.self.1.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.drawImage.self.1 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.self.2.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.drawImage.self.2 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.svg.html | OK | OK | OK | OK | OK | OK |
drawImage() of an SVG image | PASS | PASS | TIMEOUT | TIMEOUT | PASS | FAIL |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.transform.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.drawImage.transform | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.wrongtype.html | OK | OK | OK | OK | OK | OK |
Incorrect image types in drawImage do not match any defined overloads, so WebIDL throws a TypeError | PASS | PASS | FAIL | FAIL | PASS | PASS |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.zerocanvas.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.drawImage.zerocanvas | FAIL | PASS | PASS | FAIL | PASS | PASS |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.zerosource.html | OK | OK | OK | OK | OK | OK |
drawImage with zero-sized source rectangle throws INDEX_SIZE_ERR | FAIL | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html | OK | OK | OK | OK | OK | OK |
drawImage with zero-sized source rectangle from image throws INDEX_SIZE_ERR | FAIL | PASS | FAIL | FAIL | FAIL | FAIL |
/2dcontext/drawing-paths-to-the-canvas/drawFocusIfNeeded_001.html | OK | OK | OK | OK | OK | OK |
drawFocusIfNeeded draws a focus ring. | PASS | FAIL | FAIL | FAIL | FAIL | FAIL |
/2dcontext/drawing-paths-to-the-canvas/drawFocusIfNeeded_002.html | OK | OK | OK | OK | OK | OK |
drawFocusIfNeeded does not draw a focus ring if the element is not in focus. | PASS | PASS | FAIL | FAIL | FAIL | FAIL |
/2dcontext/drawing-paths-to-the-canvas/drawFocusIfNeeded_003.html | OK | OK | OK | OK | OK | OK |
drawFocusIfNeeded does not draw a focus ring if the element is not a descendant of the context. | PASS | PASS | FAIL | FAIL | FAIL | FAIL |
/2dcontext/drawing-paths-to-the-canvas/drawFocusIfNeeded_004.html | OK | OK | OK | OK | OK | OK |
drawFocusIfNeeded does draw a focus ring if the element is in focus. | PASS | FAIL | FAIL | FAIL | FAIL | FAIL |
/2dcontext/drawing-paths-to-the-canvas/drawFocusIfNeeded_005.html | OK | OK | OK | OK | OK | OK |
drawFocusIfNeeded does draw a focus ring if the element is in focus and the user activated a particular focus ring. | PASS | FAIL | FAIL | FAIL | FAIL | FAIL |
/2dcontext/drawing-rectangles-to-the-canvas/2d.clearRect.basic.html | OK | OK | OK | OK | OK | OK |
clearRect clears to transparent black | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-rectangles-to-the-canvas/2d.clearRect.clip.html | OK | OK | OK | OK | OK | OK |
clearRect is affected by clipping regions | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-rectangles-to-the-canvas/2d.clearRect.globalalpha.html | OK | OK | OK | OK | OK | OK |
clearRect is not affected by globalAlpha | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-rectangles-to-the-canvas/2d.clearRect.globalcomposite.html | OK | OK | OK | OK | OK | OK |
clearRect is not affected by globalCompositeOperation | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-rectangles-to-the-canvas/2d.clearRect.negative.html | OK | OK | OK | OK | OK | OK |
clearRect of negative sizes works | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-rectangles-to-the-canvas/2d.clearRect.nonfinite.html | OK | OK | OK | OK | OK | OK |
clearRect() with Infinity/NaN is ignored | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-rectangles-to-the-canvas/2d.clearRect.path.html | OK | OK | OK | OK | OK | OK |
clearRect does not affect the current path | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-rectangles-to-the-canvas/2d.clearRect.shadow.html | OK | OK | OK | OK | OK | OK |
clearRect does not draw shadows | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-rectangles-to-the-canvas/2d.clearRect.transform.html | OK | OK | OK | OK | OK | OK |
clearRect is affected by transforms | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-rectangles-to-the-canvas/2d.clearRect.zero.html | OK | OK | OK | OK | OK | OK |
clearRect of zero pixels has no effect | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-rectangles-to-the-canvas/2d.fillRect.basic.html | OK | OK | OK | OK | OK | OK |
fillRect works | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-rectangles-to-the-canvas/2d.fillRect.clip.html | OK | OK | OK | OK | OK | OK |
fillRect is affected by clipping regions | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-rectangles-to-the-canvas/2d.fillRect.negative.html | OK | OK | OK | OK | OK | OK |
fillRect of negative sizes works | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-rectangles-to-the-canvas/2d.fillRect.nonfinite.html | OK | OK | OK | OK | OK | OK |
fillRect() with Infinity/NaN is ignored | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-rectangles-to-the-canvas/2d.fillRect.path.html | OK | OK | OK | OK | OK | OK |
fillRect does not affect the current path | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-rectangles-to-the-canvas/2d.fillRect.shadow.html | OK | OK | OK | OK | OK | OK |
fillRect draws shadows | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/drawing-rectangles-to-the-canvas/2d.fillRect.transform.html | OK | OK | OK | OK | OK | OK |
fillRect is affected by transforms | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-rectangles-to-the-canvas/2d.fillRect.zero.html | OK | OK | OK | OK | OK | OK |
fillRect of zero pixels has no effect | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-rectangles-to-the-canvas/2d.strokeRect.basic.html | OK | OK | OK | OK | OK | OK |
strokeRect works | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-rectangles-to-the-canvas/2d.strokeRect.clip.html | OK | OK | OK | OK | OK | OK |
strokeRect is affected by clipping regions | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-rectangles-to-the-canvas/2d.strokeRect.globalalpha.html | OK | OK | OK | OK | OK | OK |
strokeRect is affected by globalAlpha | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-rectangles-to-the-canvas/2d.strokeRect.globalcomposite.html | OK | OK | OK | OK | OK | OK |
strokeRect is not affected by globalCompositeOperation | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-rectangles-to-the-canvas/2d.strokeRect.negative.html | OK | OK | OK | OK | OK | OK |
strokeRect of negative sizes works | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-rectangles-to-the-canvas/2d.strokeRect.nonfinite.html | OK | OK | OK | OK | OK | OK |
strokeRect() with Infinity/NaN is ignored | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-rectangles-to-the-canvas/2d.strokeRect.path.html | OK | OK | OK | OK | OK | OK |
strokeRect does not affect the current path | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-rectangles-to-the-canvas/2d.strokeRect.shadow.html | OK | OK | OK | OK | OK | OK |
strokeRect draws shadows | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/drawing-rectangles-to-the-canvas/2d.strokeRect.transform.html | OK | OK | OK | OK | OK | OK |
fillRect is affected by transforms | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-rectangles-to-the-canvas/2d.strokeRect.zero.1.html | OK | OK | OK | OK | OK | OK |
strokeRect of 0x0 pixels draws nothing | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-rectangles-to-the-canvas/2d.strokeRect.zero.2.html | OK | OK | OK | OK | OK | OK |
strokeRect of 0x0 pixels draws nothing, including caps and joins | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-rectangles-to-the-canvas/2d.strokeRect.zero.3.html | OK | OK | OK | OK | OK | OK |
strokeRect of Nx0 pixels draws a straight line | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-rectangles-to-the-canvas/2d.strokeRect.zero.4.html | OK | OK | OK | OK | OK | OK |
strokeRect of Nx0 pixels draws a closed line with no caps | PASS | PASS | FAIL | PASS | FAIL | PASS |
/2dcontext/drawing-rectangles-to-the-canvas/2d.strokeRect.zero.5.html | OK | OK | OK | OK | OK | OK |
strokeRect of Nx0 pixels draws a closed line with joins | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-text-to-the-canvas/2d.text.draw.align.center.html | OK | OK | OK | OK | OK | OK |
textAlign center is the center of the em squares (not the bounding box) | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-text-to-the-canvas/2d.text.draw.align.end.ltr.html | OK | OK | OK | OK | OK | OK |
textAlign end with ltr is the right edge | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-text-to-the-canvas/2d.text.draw.align.end.rtl.html | OK | OK | OK | OK | OK | OK |
textAlign end with rtl is the left edge | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-text-to-the-canvas/2d.text.draw.align.left.html | OK | OK | OK | OK | OK | OK |
textAlign left is the left of the first em square (not the bounding box) | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-text-to-the-canvas/2d.text.draw.align.right.html | OK | OK | OK | OK | OK | OK |
textAlign right is the right of the last em square (not the bounding box) | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-text-to-the-canvas/2d.text.draw.align.start.ltr.html | OK | OK | OK | OK | OK | OK |
textAlign start with ltr is the left edge | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-text-to-the-canvas/2d.text.draw.align.start.rtl.html | OK | OK | OK | OK | OK | OK |
textAlign start with rtl is the right edge | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-text-to-the-canvas/2d.text.draw.baseline.alphabetic.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.text.draw.baseline.alphabetic | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.maxWidth.bound.html | OK | OK | OK | OK | OK | OK |
fillText handles maxWidth based on line size, not bounding box size | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.maxWidth.fontface.html | OK | OK | OK | OK | OK | OK |
fillText works on @font-face fonts | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.maxWidth.negative.html | OK | OK | OK | OK | OK | OK |
fillText handles maxWidth correctly | PASS | FAIL | PASS | FAIL | PASS | FAIL |
/2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.maxWidth.small.html | OK | OK | OK | OK | OK | OK |
fillText handles maxWidth correctly | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.maxWidth.zero.html | OK | OK | OK | OK | OK | OK |
fillText handles maxWidth correctly | PASS | FAIL | PASS | PASS | PASS | FAIL |
/2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.unaffected.html | OK | OK | OK | OK | OK | OK |
fillText does not start a new path or subpath | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-text-to-the-canvas/2d.text.draw.fontface.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.text.draw.fontface | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-text-to-the-canvas/2d.text.draw.fontface.notinpage.html | OK | OK | OK | OK | OK | OK |
@font-face fonts should work even if they are not used in the page | FAIL | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-text-to-the-canvas/2d.text.draw.fontface.repeat.html | OK | OK | OK | OK | OK | OK |
Draw with the font immediately, then wait a bit until and draw again. (This crashes some version of WebKit.) | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-text-to-the-canvas/2d.text.draw.space.basic.html | OK | OK | OK | OK | OK | OK |
U+0020 is rendered the correct size (1em wide) | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-text-to-the-canvas/2d.text.draw.space.collapse.nonspace.html | OK | OK | OK | OK | OK | OK |
Non-space characters are not converted to U+0020 and collapsed | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/drawing-text-to-the-canvas/2d.text.draw.stroke.unaffected.html | OK | OK | OK | OK | OK | OK |
strokeText does not start a new path or subpath | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-text-to-the-canvas/2d.text.measure.width.basic.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.text.measure.width.basic | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/drawing-text-to-the-canvas/2d.text.measure.width.empty.html | OK | OK | OK | OK | OK | OK |
The empty string has zero width | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.default.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.default | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.get.semitransparent.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.get.semitransparent | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.get.solid.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.get.solid | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.get.transparent.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.get.transparent | PASS | PASS | PASS | FAIL | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.invalidstring.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.invalidstring | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.invalidtype.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.invalidtype | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.current.basic.html | OK | OK | OK | OK | OK | OK |
currentColor is computed from the canvas element | PASS | PASS | FAIL | FAIL | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.current.changed.html | OK | OK | OK | OK | OK | OK |
currentColor is computed when the attribute is set, not when it is painted | PASS | PASS | FAIL | FAIL | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.current.removed.html | OK | OK | OK | OK | OK | OK |
currentColor is solid black when the canvas element is not in a document | PASS | PASS | FAIL | FAIL | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.hex3.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.hex3 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.hex4.html | OK | OK | - | - | - | - |
Canvas test: 2d.fillStyle.parse.hex4 | FAIL | FAIL | - | - | - | - |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.hex6.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.hex6 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.hex8.html | OK | OK | - | - | - | - |
Canvas test: 2d.fillStyle.parse.hex8 | FAIL | FAIL | - | - | - | - |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.hsl-1.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.hsl-1 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.hsl-2.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.hsl-2 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.hsl-3.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.hsl-3 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.hsl-4.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.hsl-4 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.hsl-5.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.hsl-5 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.hsl-6.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.hsl-6 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-1.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.hsl-clamp-1 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-2.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.hsl-clamp-2 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-3.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.hsl-clamp-3 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-4.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.hsl-clamp-4 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.hsla-1.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.hsla-1 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.hsla-2.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.hsla-2 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-1.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.hsla-clamp-1 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-2.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.hsla-clamp-2 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-3.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.hsla-clamp-3 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-4.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.hsla-clamp-4 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-5.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.hsla-clamp-5 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-6.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.hsla-clamp-6 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.html4.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.html4 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex1.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.invalid.hex1 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex2.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.invalid.hex2 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex3.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.invalid.hex3 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex4.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.invalid.hex4 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex5.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.invalid.hex5 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex6.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.invalid.hex6 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex7.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.invalid.hex7 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex8.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.invalid.hex8 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-1.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.invalid.hsl-1 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-2.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.invalid.hsl-2 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-3.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.invalid.hsl-3 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-4.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.invalid.hsl-4 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-5.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.invalid.hsl-5 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-6.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.invalid.hsl-6 | PASS | PASS | FAIL | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-1.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.invalid.hsla-1 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-2.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.invalid.hsla-2 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-1.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.invalid.name-1 | PASS | PASS | PASS | FAIL | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-2.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.invalid.name-2 | PASS | PASS | PASS | FAIL | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-3.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.invalid.name-3 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-4.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.invalid.name-4 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-5.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.invalid.name-5 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-1.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.invalid.rgb-1 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-2.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.invalid.rgb-2 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-3.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.invalid.rgb-3 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-4.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.invalid.rgb-4 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-5.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.invalid.rgb-5 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-6.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.invalid.rgb-6 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-7.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.invalid.rgb-7 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-1.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.invalid.rgba-1 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-2.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.invalid.rgba-2 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-3.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.invalid.rgba-3 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-4.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.invalid.rgba-4 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-5.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.invalid.rgba-5 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-6.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.invalid.rgba-6 | PASS | PASS | FAIL | PASS | PASS | FAIL |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-7.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.invalid.rgba-7 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-1.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.rgb-clamp-1 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-2.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.rgb-clamp-2 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-3.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.rgb-clamp-3 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-4.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.rgb-clamp-4 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-5.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.rgb-clamp-5 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.rgb-eof.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.rgb-eof | PASS | PASS | FAIL | PASS | FAIL | FAIL |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.rgb-num.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.rgb-num | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.rgb-percent.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.rgb-percent | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.rgba-clamp-1.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.rgba-clamp-1 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.rgba-clamp-2.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.rgba-clamp-2 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.rgba-eof.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.rgba-eof | PASS | PASS | FAIL | PASS | FAIL | FAIL |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.rgba-num-1.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.rgba-num-1 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.rgba-num-2.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.rgba-num-2 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.rgba-percent.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.rgba-percent | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-1.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.rgba-solid-1 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-2.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.rgba-solid-2 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-3.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.rgba-solid-3 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-4.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.rgba-solid-4 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.svg-1.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.svg-1 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.svg-2.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.svg-2 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.system.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.system | PASS | PASS | PASS | FAIL | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.transparent-1.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.transparent-1 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.transparent-2.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.fillStyle.parse.transparent-2 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.empty.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.empty | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.interpolate.alpha.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.interpolate.alpha | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.interpolate.colour.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.interpolate.colour | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.interpolate.colouralpha.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.interpolate.colouralpha | FAIL | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.interpolate.multiple.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.interpolate.multiple | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.interpolate.outside.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.interpolate.outside | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.interpolate.overlap.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.interpolate.overlap | PASS | PASS | FAIL | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.interpolate.overlap2.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.interpolate.overlap2 | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/fill-and-stroke-styles/2d.gradient.interpolate.solid.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.interpolate.solid | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.interpolate.vertical.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.interpolate.vertical | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fill.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.interpolate.zerosize.fill | PASS | FAIL | PASS | PASS | PASS | FAIL |
/2dcontext/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillRect.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.interpolate.zerosize.fillRect | PASS | FAIL | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillText.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.interpolate.zerosize.fillText | PASS | FAIL | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.stroke.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.interpolate.zerosize.stroke | PASS | FAIL | PASS | PASS | PASS | FAIL |
/2dcontext/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeRect.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.interpolate.zerosize.strokeRect | PASS | FAIL | PASS | PASS | PASS | FAIL |
/2dcontext/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeText.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.interpolate.zerosize.strokeText | PASS | FAIL | PASS | PASS | PASS | FAIL |
/2dcontext/fill-and-stroke-styles/2d.gradient.linear.nonfinite.html | OK | OK | OK | OK | OK | OK |
createLinearGradient() throws TypeError if arguments are not finite | PASS | PASS | FAIL | FAIL | FAIL | FAIL |
/2dcontext/fill-and-stroke-styles/2d.gradient.linear.transform.1.html | OK | OK | OK | OK | OK | OK |
Linear gradient coordinates are relative to the coordinate space at the time of filling | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/fill-and-stroke-styles/2d.gradient.linear.transform.2.html | OK | OK | OK | OK | OK | OK |
Linear gradient coordinates are relative to the coordinate space at the time of filling | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/fill-and-stroke-styles/2d.gradient.linear.transform.3.html | OK | OK | OK | OK | OK | OK |
Linear gradient transforms do not experience broken caching effects | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/fill-and-stroke-styles/2d.gradient.object.compare.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.object.compare | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.object.crosscanvas.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.object.crosscanvas | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.object.current.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.object.current | PASS | FAIL | FAIL | FAIL | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.object.invalidcolour.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.object.invalidcolour | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.object.invalidoffset.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.object.invalidoffset | PASS | PASS | PASS | FAIL | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.object.return.html | OK | OK | OK | OK | OK | OK |
createLinearGradient() and createRadialGradient() returns objects implementing CanvasGradient | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.object.type.html | OK | OK | OK | OK | OK | OK |
window.CanvasGradient exists and has the right properties | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.object.update.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.object.update | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.radial.cone.behind.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.radial.cone.behind | PASS | FAIL | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.radial.cone.beside.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.radial.cone.beside | PASS | FAIL | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.radial.cone.bottom.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.radial.cone.bottom | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.radial.cone.cylinder.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.radial.cone.cylinder | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.radial.cone.front.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.radial.cone.front | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.radial.cone.shape1.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.radial.cone.shape1 | PASS | PASS | FAIL | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.radial.cone.shape2.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.radial.cone.shape2 | PASS | FAIL | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.radial.cone.top.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.radial.cone.top | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.radial.equal.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.radial.equal | PASS | FAIL | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.radial.inside1.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.radial.inside1 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.radial.inside2.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.radial.inside2 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.radial.inside3.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.radial.inside3 | PASS | PASS | FAIL | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.radial.negative.html | OK | OK | OK | OK | OK | OK |
createRadialGradient() throws INDEX_SIZE_ERR if either radius is negative | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.radial.nonfinite.html | OK | OK | OK | OK | OK | OK |
createRadialGradient() throws TypeError if arguments are not finite | PASS | PASS | FAIL | FAIL | FAIL | FAIL |
/2dcontext/fill-and-stroke-styles/2d.gradient.radial.outside1.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.radial.outside1 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.radial.outside2.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.radial.outside2 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.radial.outside3.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.radial.outside3 | FAIL | PASS | FAIL | PASS | PASS | FAIL |
/2dcontext/fill-and-stroke-styles/2d.gradient.radial.touch1.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.radial.touch1 | PASS | FAIL | FAIL | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.radial.touch2.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.radial.touch2 | PASS | PASS | FAIL | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.radial.touch3.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.gradient.radial.touch3 | PASS | FAIL | FAIL | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.gradient.radial.transform.1.html | OK | OK | OK | OK | OK | OK |
Radial gradient coordinates are relative to the coordinate space at the time of filling | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/fill-and-stroke-styles/2d.gradient.radial.transform.2.html | OK | OK | OK | OK | OK | OK |
Radial gradient coordinates are relative to the coordinate space at the time of filling | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/fill-and-stroke-styles/2d.gradient.radial.transform.3.html | OK | OK | OK | OK | OK | OK |
Radial gradient transforms do not experience broken caching effects | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/fill-and-stroke-styles/2d.pattern.animated.gif.html | OK | OK | OK | OK | OK | OK |
createPattern() of an animated GIF draws the first frame | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.pattern.basic.canvas.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.basic.canvas | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.pattern.basic.image.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.basic.image | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.pattern.basic.nocontext.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.basic.nocontext | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.pattern.basic.type.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.basic.type | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.pattern.basic.zerocanvas.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.basic.zerocanvas | PASS | PASS | PASS | FAIL | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.pattern.crosscanvas.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.crosscanvas | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.pattern.image.broken.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.image.broken | FAIL | FAIL | FAIL | FAIL | FAIL | FAIL |
/2dcontext/fill-and-stroke-styles/2d.pattern.image.incomplete.emptysrc.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.image.incomplete.emptysrc | PASS | FAIL | PASS | PASS | FAIL | FAIL |
/2dcontext/fill-and-stroke-styles/2d.pattern.image.incomplete.immediate.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.image.incomplete.immediate | PASS | FAIL | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.pattern.image.incomplete.nosrc.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.image.incomplete.nosrc | PASS | FAIL | PASS | PASS | FAIL | FAIL |
/2dcontext/fill-and-stroke-styles/2d.pattern.image.incomplete.reload.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.image.incomplete.reload | PASS | FAIL | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.pattern.image.incomplete.removedsrc.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.image.incomplete.removedsrc | PASS | FAIL | PASS | PASS | FAIL | FAIL |
/2dcontext/fill-and-stroke-styles/2d.pattern.image.null.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.image.null | PASS | PASS | FAIL | FAIL | FAIL | FAIL |
/2dcontext/fill-and-stroke-styles/2d.pattern.image.string.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.image.string | PASS | PASS | FAIL | FAIL | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.pattern.image.undefined.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.image.undefined | PASS | PASS | FAIL | FAIL | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.pattern.modify.canvas1.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.modify.canvas1 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.pattern.modify.canvas2.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.modify.canvas2 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.pattern.modify.image1.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.modify.image1 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.pattern.modify.image2.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.modify.image2 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.paint.norepeat.basic | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.paint.norepeat.coord1 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.paint.norepeat.coord2 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.paint.norepeat.coord3 | FAIL | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.paint.norepeat.outside | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.pattern.paint.orientation.canvas.html | OK | OK | OK | OK | OK | OK |
Canvas patterns do not get flipped when painted | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.pattern.paint.orientation.image.html | OK | OK | OK | OK | OK | OK |
Image patterns do not get flipped when painted | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.paint.repeat.basic | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.paint.repeat.coord1 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.paint.repeat.coord2 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.paint.repeat.coord3 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.paint.repeat.outside | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.paint.repeatx.basic | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.paint.repeatx.coord1 | FAIL | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.paint.repeatx.outside | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.paint.repeaty.basic | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.paint.repeaty.coord1 | FAIL | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.paint.repeaty.outside | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/fill-and-stroke-styles/2d.pattern.repeat.case.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.repeat.case | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.pattern.repeat.empty.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.repeat.empty | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.pattern.repeat.null.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.repeat.null | PASS | PASS | PASS | FAIL | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.pattern.repeat.nullsuffix.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.repeat.nullsuffix | PASS | PASS | FAIL | FAIL | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.pattern.repeat.undefined.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.repeat.undefined | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.pattern.repeat.unrecognised.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.repeat.unrecognised | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.pattern.repeat.unrecognisednull.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.pattern.repeat.unrecognisednull | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/fill-and-stroke-styles/2d.strokeStyle.default.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.strokeStyle.default | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/hit-regions/addHitRegions-NotSupportedError-01.html | OK | OK | OK | OK | OK | OK |
fillRect should not affect current default path and NotSupportedError should be thrown. | FAIL | FAIL | FAIL | FAIL | FAIL | FAIL |
strokeRect should not affect current default path and NotSupportedError should be thrown. | FAIL | FAIL | FAIL | FAIL | FAIL | FAIL |
fillText should not affect current default path and NotSupportedError should be thrown. | FAIL | FAIL | FAIL | FAIL | FAIL | FAIL |
strokeText should not affect current default path and NotSupportedError shuld be thrown. | FAIL | FAIL | FAIL | FAIL | FAIL | FAIL |
/2dcontext/hit-regions/hitregions-members-exist.html | OK | OK | - | - | - | OK |
context.addHitRegion Exists | FAIL | FAIL | - | - | - | FAIL |
context.removeHitRegion Exists | FAIL | FAIL | - | - | - | FAIL |
context.clearHitRegions Exists | FAIL | FAIL | - | - | - | FAIL |
/2dcontext/line-styles/2d.line.cap.butt.html | OK | OK | OK | OK | OK | OK |
lineCap 'butt' is rendered correctly | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/line-styles/2d.line.cap.closed.html | OK | OK | OK | OK | OK | OK |
Line caps are not drawn at the corners of an unclosed rectangle | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/line-styles/2d.line.cap.invalid.html | OK | OK | OK | OK | OK | OK |
Setting lineCap to invalid values is ignored | PASS | PASS | FAIL | FAIL | PASS | PASS |
/2dcontext/line-styles/2d.line.cap.open.html | OK | OK | OK | OK | OK | OK |
Line caps are drawn at the corners of an unclosed rectangle | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/line-styles/2d.line.cap.round.html | OK | OK | OK | OK | OK | OK |
lineCap 'round' is rendered correctly | PASS | PASS | PASS | PASS | FAIL | PASS |
/2dcontext/line-styles/2d.line.cap.square.html | OK | OK | OK | OK | OK | OK |
lineCap 'square' is rendered correctly | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/line-styles/2d.line.cap.valid.html | OK | OK | OK | OK | OK | OK |
Setting lineCap to valid values works | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/line-styles/2d.line.cross.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.line.cross | PASS | PASS | PASS | FAIL | PASS | PASS |
/2dcontext/line-styles/2d.line.defaults.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.line.defaults | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/line-styles/2d.line.join.bevel.html | OK | OK | OK | OK | OK | OK |
lineJoin 'bevel' is rendered correctly | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/line-styles/2d.line.join.closed.html | OK | OK | OK | OK | OK | OK |
Line joins are drawn at the corner of a closed rectangle | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/line-styles/2d.line.join.invalid.html | OK | OK | OK | OK | OK | OK |
Setting lineJoin to invalid values is ignored | PASS | PASS | FAIL | FAIL | PASS | PASS |
/2dcontext/line-styles/2d.line.join.miter.html | OK | OK | OK | OK | OK | OK |
lineJoin 'miter' is rendered correctly | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/line-styles/2d.line.join.open.html | OK | OK | OK | OK | OK | OK |
Line joins are not drawn at the corner of an unclosed rectangle | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/line-styles/2d.line.join.parallel.html | OK | OK | OK | OK | OK | OK |
Line joins are drawn at 180-degree joins | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/line-styles/2d.line.join.round.html | OK | OK | OK | OK | OK | OK |
lineJoin 'round' is rendered correctly | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/line-styles/2d.line.join.valid.html | OK | OK | OK | OK | OK | OK |
Setting lineJoin to valid values works | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/line-styles/2d.line.miter.acute.html | OK | OK | OK | OK | OK | OK |
Miter joins are drawn correctly with acute angles | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/line-styles/2d.line.miter.exceeded.html | OK | OK | OK | OK | OK | OK |
Miter joins are not drawn when the miter limit is exceeded | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/line-styles/2d.line.miter.invalid.html | OK | OK | OK | OK | OK | OK |
Setting miterLimit to invalid values is ignored | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/line-styles/2d.line.miter.lineedge.html | OK | OK | OK | OK | OK | OK |
Miter joins are not drawn when the miter limit is exceeded at the corners of a zero-height rectangle | PASS | PASS | FAIL | PASS | FAIL | FAIL |
/2dcontext/line-styles/2d.line.miter.obtuse.html | OK | OK | OK | OK | OK | OK |
Miter joins are drawn correctly with obtuse angles | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/line-styles/2d.line.miter.rightangle.html | OK | OK | OK | OK | OK | OK |
Miter joins are not drawn when the miter limit is exceeded, on exact right angles | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/line-styles/2d.line.miter.valid.html | OK | OK | OK | OK | OK | OK |
Setting miterLimit to valid values works | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/line-styles/2d.line.miter.within.html | OK | OK | OK | OK | OK | OK |
Miter joins are drawn when the miter limit is not quite exceeded | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/line-styles/2d.line.union.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.line.union | PASS | PASS | PASS | FAIL | PASS | PASS |
/2dcontext/line-styles/2d.line.width.basic.html | OK | OK | OK | OK | OK | OK |
lineWidth determines the width of line strokes | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/line-styles/2d.line.width.invalid.html | OK | OK | OK | OK | OK | OK |
Setting lineWidth to invalid values is ignored | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/line-styles/2d.line.width.scaledefault.html | OK | OK | OK | OK | OK | OK |
Default lineWidth strokes are affected by scale transformations | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/line-styles/2d.line.width.transformed.html | OK | OK | OK | OK | OK | OK |
Line stroke widths are affected by scale transformations | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/line-styles/2d.line.width.valid.html | OK | OK | OK | OK | OK | OK |
Setting lineWidth to valid values works | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.arc.angle.1.html | OK | OK | OK | OK | OK | OK |
arc() draws pi/2 .. -pi anticlockwise correctly | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.arc.angle.2.html | OK | OK | OK | OK | OK | OK |
arc() draws -3pi/2 .. -pi anticlockwise correctly | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.arc.angle.3.html | OK | OK | OK | OK | OK | OK |
arc() wraps angles mod 2pi when anticlockwise and end > start+2pi | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.arc.angle.4.html | OK | OK | OK | OK | OK | OK |
arc() draws a full circle when clockwise and end > start+2pi | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.arc.angle.5.html | OK | OK | OK | OK | OK | OK |
arc() wraps angles mod 2pi when clockwise and start > end+2pi | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.arc.angle.6.html | OK | OK | OK | OK | OK | OK |
arc() draws a full circle when anticlockwise and start > end+2pi | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.arc.default.html | OK | OK | OK | OK | OK | OK |
arc() with missing last argument defaults to clockwise | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.arc.empty.html | OK | OK | OK | OK | OK | OK |
arc() with an empty path does not draw a straight line to the start point | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.arc.end.html | OK | OK | OK | OK | OK | OK |
arc() adds the end point of the arc to the subpath | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.arc.negative.html | OK | OK | OK | OK | OK | OK |
arc() with negative radius throws INDEX_SIZE_ERR | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.arc.nonempty.html | OK | OK | OK | OK | OK | OK |
arc() with a non-empty path does draw a straight line to the start point | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.arc.nonfinite.html | OK | OK | OK | OK | OK | OK |
arc() with Infinity/NaN is ignored | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.arc.scale.1.html | OK | OK | OK | OK | OK | OK |
Non-uniformly scaled arcs are the right shape | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.arc.scale.2.html | OK | OK | OK | OK | OK | OK |
Highly scaled arcs are the right shape | PASS | PASS | PASS | FAIL | PASS | PASS |
/2dcontext/path-objects/2d.path.arc.selfintersect.1.html | OK | OK | OK | OK | OK | OK |
arc() with lineWidth > 2*radius is drawn sensibly | PASS | FAIL | FAIL | FAIL | PASS | PASS |
/2dcontext/path-objects/2d.path.arc.selfintersect.2.html | OK | OK | OK | OK | OK | OK |
arc() with lineWidth > 2*radius is drawn sensibly | PASS | PASS | PASS | FAIL | PASS | PASS |
/2dcontext/path-objects/2d.path.arc.shape.1.html | OK | OK | OK | OK | OK | OK |
arc() from 0 to pi does not draw anything in the wrong half | PASS | PASS | PASS | FAIL | PASS | PASS |
/2dcontext/path-objects/2d.path.arc.shape.2.html | OK | OK | OK | OK | OK | OK |
arc() from 0 to pi draws stuff in the right half | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.arc.shape.3.html | OK | OK | OK | OK | OK | OK |
arc() from 0 to -pi/2 does not draw anything in the wrong quadrant | PASS | FAIL | FAIL | FAIL | PASS | PASS |
/2dcontext/path-objects/2d.path.arc.shape.4.html | OK | OK | OK | OK | OK | OK |
arc() from 0 to -pi/2 draws stuff in the right quadrant | PASS | PASS | PASS | FAIL | PASS | PASS |
/2dcontext/path-objects/2d.path.arc.shape.5.html | OK | OK | OK | OK | OK | OK |
arc() from 0 to 5pi does not draw crazy things | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.arc.twopie.1.html | OK | OK | OK | OK | OK | OK |
arc() draws nothing when end = start + 2pi-e and anticlockwise | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.arc.twopie.2.html | OK | OK | OK | OK | OK | OK |
arc() draws a full circle when end = start + 2pi-e and clockwise | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.arc.twopie.3.html | OK | OK | OK | OK | OK | OK |
arc() draws a full circle when end = start + 2pi+e and anticlockwise | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.arc.twopie.4.html | OK | OK | OK | OK | OK | OK |
arc() draws nothing when end = start + 2pi+e and clockwise | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.arc.zero.1.html | OK | OK | OK | OK | OK | OK |
arc() draws nothing when startAngle = endAngle and anticlockwise | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.arc.zero.2.html | OK | OK | OK | OK | OK | OK |
arc() draws nothing when startAngle = endAngle and clockwise | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.arc.zeroradius.html | OK | OK | OK | OK | OK | OK |
arc() with zero radius draws a line to the start point | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.arcTo.coincide.1.html | OK | OK | OK | OK | OK | OK |
arcTo() has no effect if P0 = P1 | PASS | PASS | PASS | FAIL | PASS | PASS |
/2dcontext/path-objects/2d.path.arcTo.coincide.2.html | OK | OK | OK | OK | OK | OK |
arcTo() draws a straight line to P1 if P1 = P2 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.arcTo.collinear.1.html | OK | OK | OK | OK | OK | OK |
arcTo() with all points on a line, and P1 between P0/P2, draws a straight line to P1 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.arcTo.collinear.2.html | OK | OK | OK | OK | OK | OK |
arcTo() with all points on a line, and P2 between P0/P1, draws a straight line to P1 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.arcTo.collinear.3.html | OK | OK | OK | OK | OK | OK |
arcTo() with all points on a line, and P0 between P1/P2, draws a straight line to P1 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.arcTo.ensuresubpath.1.html | OK | OK | OK | OK | OK | OK |
If there is no subpath, the first control point is added (and nothing is drawn up to it) | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.arcTo.ensuresubpath.2.html | OK | OK | OK | OK | OK | OK |
If there is no subpath, the first control point is added | PASS | PASS | PASS | FAIL | PASS | PASS |
/2dcontext/path-objects/2d.path.arcTo.negative.html | OK | OK | OK | OK | OK | OK |
arcTo() with negative radius throws an exception | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.arcTo.nonfinite.html | OK | OK | OK | OK | OK | OK |
arcTo() with Infinity/NaN is ignored | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.arcTo.scale.html | OK | OK | OK | OK | OK | OK |
arcTo scales the curve, not just the control points | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.arcTo.shape.curve1.html | OK | OK | OK | OK | OK | OK |
arcTo() curves in the right kind of shape | PASS | PASS | PASS | FAIL | PASS | FAIL |
/2dcontext/path-objects/2d.path.arcTo.shape.curve2.html | OK | OK | OK | OK | OK | OK |
arcTo() curves in the right kind of shape | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/path-objects/2d.path.arcTo.shape.end.html | OK | OK | OK | OK | OK | OK |
arcTo() does not draw anything from P1 to P2 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.arcTo.shape.start.html | OK | OK | OK | OK | OK | OK |
arcTo() draws a straight line from P0 to P1 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.arcTo.transformation.html | OK | OK | OK | OK | OK | OK |
arcTo joins up to the last subpath point correctly | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.arcTo.zero.1.html | OK | OK | OK | OK | OK | OK |
arcTo() with zero radius draws a straight line from P0 to P1 | PASS | PASS | PASS | FAIL | PASS | PASS |
/2dcontext/path-objects/2d.path.arcTo.zero.2.html | OK | OK | OK | OK | OK | OK |
arcTo() with zero radius draws a straight line from P0 to P1, even when all points are collinear | PASS | PASS | PASS | FAIL | PASS | PASS |
/2dcontext/path-objects/2d.path.beginPath.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.beginPath | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.bezierCurveTo.basic.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.bezierCurveTo.basic | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.bezierCurveTo.ensuresubpath.1.html | OK | OK | OK | OK | OK | OK |
If there is no subpath, the first control point is added (and nothing is drawn up to it) | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.bezierCurveTo.ensuresubpath.2.html | OK | OK | OK | OK | OK | OK |
If there is no subpath, the first control point is added | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.bezierCurveTo.nonfinite.html | OK | OK | OK | OK | OK | OK |
bezierCurveTo() with Infinity/NaN is ignored | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.bezierCurveTo.scaled.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.bezierCurveTo.scaled | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.bezierCurveTo.shape.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.bezierCurveTo.shape | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.clip.basic.1.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.clip.basic.1 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.clip.basic.2.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.clip.basic.2 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.clip.empty.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.clip.empty | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.clip.intersect.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.clip.intersect | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.clip.unaffected.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.clip.unaffected | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.clip.winding.1.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.clip.winding.1 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.clip.winding.2.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.clip.winding.2 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.closePath.empty.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.closePath.empty | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.closePath.newline.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.closePath.newline | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.closePath.nextpoint.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.closePath.nextpoint | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.fill.closed.basic.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.fill.closed.basic | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.fill.closed.unaffected.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.fill.closed.unaffected | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.fill.overlap.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.fill.overlap | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.fill.winding.add.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.fill.winding.add | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.fill.winding.subtract.1.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.fill.winding.subtract.1 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.fill.winding.subtract.2.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.fill.winding.subtract.2 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.fill.winding.subtract.3.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.fill.winding.subtract.3 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.initial.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.initial | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.isPointInPath.arc.html | OK | OK | OK | OK | OK | OK |
isPointInPath() works on arcs | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.isPointInPath.basic.1.html | OK | OK | OK | OK | OK | OK |
isPointInPath() detects whether the point is inside the path | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.isPointInPath.basic.2.html | OK | OK | OK | OK | OK | OK |
isPointInPath() detects whether the point is inside the path | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.isPointInPath.bezier.html | OK | OK | OK | OK | OK | OK |
isPointInPath() works on Bezier curves | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.isPointInPath.bigarc.html | OK | OK | OK | OK | OK | OK |
isPointInPath() works on unclosed arcs larger than 2pi | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.isPointInPath.edge.html | OK | OK | OK | OK | OK | OK |
isPointInPath() counts points on the path as being inside | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/path-objects/2d.path.isPointInPath.empty.html | OK | OK | OK | OK | OK | OK |
isPointInPath() works when there is no path | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.isPointInPath.nonfinite.html | OK | OK | OK | OK | OK | OK |
isPointInPath() returns false for non-finite arguments | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.isPointInPath.outside.html | OK | OK | OK | OK | OK | OK |
isPointInPath() works on paths outside the canvas | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.isPointInPath.subpath.html | OK | OK | OK | OK | OK | OK |
isPointInPath() uses the current path, not just the subpath | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.isPointInPath.transform.1.html | OK | OK | OK | OK | OK | OK |
isPointInPath() handles transformations correctly | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.isPointInPath.transform.2.html | OK | OK | OK | OK | OK | OK |
isPointInPath() handles transformations correctly | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.isPointInPath.transform.3.html | OK | OK | OK | OK | OK | OK |
isPointInPath() handles transformations correctly | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.isPointInPath.transform.4.html | OK | OK | OK | OK | OK | OK |
isPointInPath() handles transformations correctly | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.isPointInPath.unclosed.html | OK | OK | OK | OK | OK | OK |
isPointInPath() works on unclosed subpaths | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.isPointInPath.winding.html | OK | OK | OK | OK | OK | OK |
isPointInPath() uses the non-zero winding number rule | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.lineTo.basic.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.lineTo.basic | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.lineTo.ensuresubpath.1.html | OK | OK | OK | OK | OK | OK |
If there is no subpath, the point is added and nothing is drawn | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.lineTo.ensuresubpath.2.html | OK | OK | OK | OK | OK | OK |
If there is no subpath, the point is added and used for subsequent drawing | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.lineTo.nextpoint.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.lineTo.nextpoint | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.lineTo.nonfinite.html | OK | OK | OK | OK | OK | OK |
lineTo() with Infinity/NaN is ignored | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.moveTo.basic.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.moveTo.basic | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.moveTo.multiple.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.moveTo.multiple | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.moveTo.newsubpath.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.moveTo.newsubpath | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.moveTo.nonfinite.html | OK | OK | OK | OK | OK | OK |
moveTo() with Infinity/NaN is ignored | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.quadraticCurveTo.basic.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.quadraticCurveTo.basic | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.quadraticCurveTo.ensuresubpath.1.html | OK | OK | OK | OK | OK | OK |
If there is no subpath, the first control point is added (and nothing is drawn up to it) | PASS | FAIL | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.quadraticCurveTo.ensuresubpath.2.html | OK | OK | OK | OK | OK | OK |
If there is no subpath, the first control point is added | PASS | FAIL | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.quadraticCurveTo.nonfinite.html | OK | OK | OK | OK | OK | OK |
quadraticCurveTo() with Infinity/NaN is ignored | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.quadraticCurveTo.scaled.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.quadraticCurveTo.scaled | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.quadraticCurveTo.shape.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.quadraticCurveTo.shape | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.rect.basic.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.rect.basic | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.rect.closed.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.rect.closed | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.rect.end.1.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.rect.end.1 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.rect.end.2.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.rect.end.2 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.rect.negative.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.rect.negative | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.rect.newsubpath.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.rect.newsubpath | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.rect.nonfinite.html | OK | OK | OK | OK | OK | OK |
rect() with Infinity/NaN is ignored | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.rect.selfintersect.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.rect.selfintersect | PASS | FAIL | PASS | FAIL | PASS | PASS |
/2dcontext/path-objects/2d.path.rect.winding.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.rect.winding | PASS | PASS | PASS | PASS | FAIL | PASS |
/2dcontext/path-objects/2d.path.rect.zero.1.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.rect.zero.1 | PASS | PASS | FAIL | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.rect.zero.2.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.rect.zero.2 | PASS | PASS | FAIL | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.rect.zero.3.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.rect.zero.3 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.rect.zero.4.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.rect.zero.4 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.rect.zero.5.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.rect.zero.5 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.rect.zero.6.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.rect.zero.6 | PASS | FAIL | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.stroke.empty.html | OK | OK | OK | OK | OK | OK |
Empty subpaths are not stroked | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.stroke.overlap.html | OK | OK | OK | OK | OK | OK |
Stroked subpaths are combined before being drawn | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.stroke.prune.arc.html | OK | OK | OK | OK | OK | OK |
Zero-length line segments from arcTo and arc are removed before stroking | PASS | FAIL | FAIL | FAIL | PASS | PASS |
/2dcontext/path-objects/2d.path.stroke.prune.closed.html | OK | OK | OK | OK | OK | OK |
Zero-length line segments from closed paths are removed before stroking | PASS | FAIL | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.stroke.prune.corner.html | OK | OK | OK | OK | OK | OK |
Zero-length line segments are removed before stroking with miters | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.stroke.prune.curve.html | OK | OK | OK | OK | OK | OK |
Zero-length line segments from quadraticCurveTo and bezierCurveTo are removed before stroking | PASS | FAIL | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.stroke.prune.line.html | OK | OK | OK | OK | OK | OK |
Zero-length line segments from lineTo are removed before stroking | PASS | FAIL | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.stroke.prune.rect.html | OK | OK | OK | OK | OK | OK |
Zero-length line segments from rect and strokeRect are removed before stroking | PASS | FAIL | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.stroke.scale1.html | OK | OK | OK | OK | OK | OK |
Stroke line widths are scaled by the current transformation matrix | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.stroke.scale2.html | OK | OK | OK | OK | OK | OK |
Stroke line widths are scaled by the current transformation matrix | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.stroke.skew.html | OK | OK | OK | OK | OK | OK |
Strokes lines are skewed by the current transformation matrix | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.stroke.unaffected.html | OK | OK | OK | OK | OK | OK |
Stroking does not start a new path or subpath | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.stroke.union.html | OK | OK | OK | OK | OK | OK |
Strokes in opposite directions are unioned, not subtracted | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.transformation.basic.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.path.transformation.basic | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.transformation.changing.html | OK | OK | OK | OK | OK | OK |
Transformations are applied while building paths, not when drawing | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/path-objects/2d.path.transformation.multiple.html | OK | OK | OK | OK | OK | OK |
Transformations are applied while building paths, not when drawing | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.create1.basic.html | OK | OK | OK | OK | OK | OK |
createImageData(imgdata) exists and returns something | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.create1.initial.html | OK | OK | OK | OK | OK | OK |
createImageData(imgdata) returns transparent black data of the right size | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.create1.this.html | OK | OK | OK | OK | OK | OK |
createImageData(imgdata) should throw when called with the wrong |this| | PASS | PASS | PASS | FAIL | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.create1.type.html | OK | OK | OK | OK | OK | OK |
createImageData(imgdata) returns an ImageData object containing a Uint8ClampedArray object | PASS | PASS | FAIL | PASS | PASS | FAIL |
/2dcontext/pixel-manipulation/2d.imageData.create1.zero.html | OK | OK | OK | OK | OK | OK |
createImageData(null) throws TypeError | PASS | PASS | FAIL | FAIL | FAIL | FAIL |
/2dcontext/pixel-manipulation/2d.imageData.create2.basic.html | OK | OK | OK | OK | OK | OK |
createImageData(sw, sh) exists and returns something | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.create2.initial.html | OK | OK | OK | OK | OK | OK |
createImageData(sw, sh) returns transparent black data of the right size | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.create2.large.html | OK | OK | OK | OK | OK | OK |
createImageData(sw, sh) works for sizes much larger than the canvas | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.create2.negative.html | OK | OK | OK | OK | OK | OK |
createImageData(sw, sh) takes the absolute magnitude of the size arguments | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.create2.nonfinite.html | OK | OK | OK | OK | OK | OK |
createImageData() throws TypeError if arguments are not finite | PASS | PASS | FAIL | FAIL | FAIL | FAIL |
/2dcontext/pixel-manipulation/2d.imageData.create2.round.html | OK | OK | OK | OK | OK | OK |
createImageData(w, h) is rounded the same as getImageData(0, 0, w, h) | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.create2.this.html | OK | OK | OK | OK | OK | OK |
createImageData(sw, sh) should throw when called with the wrong |this| | PASS | PASS | PASS | FAIL | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.create2.tiny.html | OK | OK | OK | OK | OK | OK |
createImageData(sw, sh) works for sizes smaller than one pixel | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.create2.type.html | OK | OK | OK | OK | OK | OK |
createImageData(sw, sh) returns an ImageData object containing a Uint8ClampedArray object | PASS | PASS | FAIL | PASS | PASS | FAIL |
/2dcontext/pixel-manipulation/2d.imageData.create2.zero.html | OK | OK | OK | OK | OK | OK |
createImageData(sw, sh) throws INDEX_SIZE_ERR if size is zero | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.get.basic.html | OK | OK | OK | OK | OK | OK |
getImageData() exists and returns something | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.get.clamp.html | OK | OK | OK | OK | OK | OK |
getImageData() clamps colours to the range [0, 255] | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.get.length.html | OK | OK | OK | OK | OK | OK |
getImageData() returns a correctly-sized Uint8ClampedArray | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.get.nonfinite.html | OK | OK | OK | OK | OK | OK |
getImageData() throws TypeError if arguments are not finite | PASS | PASS | FAIL | FAIL | FAIL | FAIL |
/2dcontext/pixel-manipulation/2d.imageData.get.nonpremul.html | OK | OK | OK | OK | OK | OK |
getImageData() returns non-premultiplied colours | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.get.order.alpha.html | OK | OK | OK | OK | OK | OK |
getImageData() returns A in the fourth component | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.get.order.cols.html | OK | OK | OK | OK | OK | OK |
getImageData() returns leftmost columns first | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.get.order.rgb.html | OK | OK | OK | OK | OK | OK |
getImageData() returns R then G then B | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.get.order.rows.html | OK | OK | OK | OK | OK | OK |
getImageData() returns topmost rows first | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.get.range.html | OK | OK | OK | OK | OK | OK |
getImageData() returns values in the range [0, 255] | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.get.source.negative.html | OK | OK | OK | OK | OK | OK |
getImageData() works with negative width and height, and returns top-to-bottom left-to-right | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.get.source.outside.html | OK | OK | OK | OK | OK | OK |
getImageData() returns transparent black outside the canvas | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.get.source.size.html | OK | OK | OK | OK | OK | OK |
getImageData() returns bigger ImageData for bigger source rectangle | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.get.tiny.html | OK | OK | OK | OK | OK | OK |
getImageData() works for sizes smaller than one pixel | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.get.type.html | OK | OK | OK | OK | OK | OK |
getImageData() returns an ImageData object containing a Uint8ClampedArray object | PASS | PASS | FAIL | PASS | PASS | FAIL |
/2dcontext/pixel-manipulation/2d.imageData.get.unaffected.html | OK | OK | OK | OK | OK | OK |
getImageData() is not affected by context state | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.get.zero.html | OK | OK | OK | OK | OK | OK |
getImageData() throws INDEX_SIZE_ERR if size is zero | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.object.clamp.html | OK | OK | OK | OK | OK | OK |
ImageData.data clamps numbers to [0, 255] | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.object.ctor.html | OK | OK | OK | OK | OK | OK |
ImageData does not have a usable constructor | FAIL | FAIL | PASS | FAIL | FAIL | PASS |
/2dcontext/pixel-manipulation/2d.imageData.object.nan.html | OK | OK | OK | OK | OK | OK |
ImageData.data converts NaN to 0 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.object.properties.html | OK | OK | OK | OK | OK | OK |
ImageData objects have the right properties | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.object.readonly.html | OK | OK | OK | OK | OK | OK |
ImageData objects properties are read-only | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.object.round.html | OK | OK | OK | OK | OK | OK |
ImageData.data rounds numbers with round-to-zero | PASS | PASS | FAIL | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.object.set.html | OK | OK | OK | OK | OK | OK |
ImageData.data can be modified | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.object.string.html | OK | OK | OK | OK | OK | OK |
ImageData.data converts strings to numbers with ToNumber | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.object.undefined.html | OK | OK | OK | OK | OK | OK |
ImageData.data converts undefined to 0 | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.put.alpha.html | OK | OK | OK | OK | OK | OK |
putImageData() puts non-solid image data correctly | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.put.basic.html | OK | OK | OK | OK | OK | OK |
putImageData() puts image data from getImageData() onto the canvas | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.put.clip.html | OK | OK | OK | OK | OK | OK |
putImageData() is not affected by clipping regions | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.put.created.html | OK | OK | OK | OK | OK | OK |
putImageData() puts image data from createImageData() onto the canvas | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.put.cross.html | OK | OK | OK | OK | OK | OK |
putImageData() accepts image data got from a different canvas | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.put.dirty.negative.html | OK | OK | OK | OK | OK | OK |
putImageData() handles negative-sized dirty rectangles correctly | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.put.dirty.outside.html | OK | OK | OK | OK | OK | OK |
putImageData() handles dirty rectangles outside the canvas correctly | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.put.dirty.rect1.html | OK | OK | OK | OK | OK | OK |
putImageData() only modifies areas inside the dirty rectangle, using width and height | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.put.dirty.rect2.html | OK | OK | OK | OK | OK | OK |
putImageData() only modifies areas inside the dirty rectangle, using x and y | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.put.dirty.zero.html | OK | OK | OK | OK | OK | OK |
putImageData() with zero-sized dirty rectangle puts nothing | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.put.modified.html | OK | OK | OK | OK | OK | OK |
putImageData() puts modified image data correctly | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.put.nonfinite.html | OK | OK | OK | OK | OK | OK |
putImageData() throws TypeError if arguments are not finite | PASS | PASS | FAIL | FAIL | FAIL | FAIL |
/2dcontext/pixel-manipulation/2d.imageData.put.null.html | OK | OK | OK | OK | OK | OK |
putImageData() with null imagedata throws TypeError | PASS | PASS | FAIL | FAIL | FAIL | FAIL |
/2dcontext/pixel-manipulation/2d.imageData.put.path.html | OK | OK | OK | OK | OK | OK |
putImageData() does not affect the current path | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.put.unaffected.html | OK | OK | OK | OK | OK | OK |
putImageData() is not affected by context state | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.put.unchanged.html | OK | OK | OK | OK | OK | OK |
putImageData(getImageData(...), ...) has no effect | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/pixel-manipulation/2d.imageData.put.wrongtype.html | OK | OK | OK | OK | OK | OK |
putImageData() does not accept non-ImageData objects | PASS | PASS | FAIL | FAIL | PASS | PASS |
/2dcontext/shadows/2d.shadow.alpha.1.html | OK | OK | OK | OK | OK | OK |
Shadow colour alpha components are used | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/shadows/2d.shadow.alpha.2.html | OK | OK | OK | OK | OK | OK |
Shadow colour alpha components are used | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/shadows/2d.shadow.alpha.3.html | OK | OK | OK | OK | OK | OK |
Shadows are affected by globalAlpha | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/shadows/2d.shadow.alpha.4.html | OK | OK | OK | OK | OK | OK |
Shadows with alpha components are correctly affected by globalAlpha | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/shadows/2d.shadow.alpha.5.html | OK | OK | OK | OK | OK | OK |
Shadows of shapes with alpha components are drawn correctly | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/shadows/2d.shadow.attributes.shadowBlur.initial.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.shadow.attributes.shadowBlur.initial | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/shadows/2d.shadow.attributes.shadowBlur.invalid.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.shadow.attributes.shadowBlur.invalid | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/shadows/2d.shadow.attributes.shadowBlur.valid.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.shadow.attributes.shadowBlur.valid | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/shadows/2d.shadow.attributes.shadowColor.initial.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.shadow.attributes.shadowColor.initial | PASS | PASS | PASS | FAIL | PASS | PASS |
/2dcontext/shadows/2d.shadow.attributes.shadowColor.invalid.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.shadow.attributes.shadowColor.invalid | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/shadows/2d.shadow.attributes.shadowColor.valid.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.shadow.attributes.shadowColor.valid | PASS | PASS | PASS | FAIL | PASS | PASS |
/2dcontext/shadows/2d.shadow.attributes.shadowOffset.initial.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.shadow.attributes.shadowOffset.initial | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/shadows/2d.shadow.attributes.shadowOffset.invalid.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.shadow.attributes.shadowOffset.invalid | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/shadows/2d.shadow.attributes.shadowOffset.valid.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.shadow.attributes.shadowOffset.valid | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/shadows/2d.shadow.canvas.alpha.html | OK | OK | OK | OK | OK | OK |
Shadows are drawn correctly for partially-transparent canvases | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/shadows/2d.shadow.canvas.basic.html | OK | OK | OK | OK | OK | OK |
Shadows are drawn for canvases | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/shadows/2d.shadow.canvas.transparent.1.html | OK | OK | OK | OK | OK | OK |
Shadows are not drawn for transparent canvases | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/shadows/2d.shadow.canvas.transparent.2.html | OK | OK | OK | OK | OK | OK |
Shadows are not drawn for transparent parts of canvases | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/shadows/2d.shadow.clip.1.html | OK | OK | OK | OK | OK | OK |
Shadows of clipped shapes are still drawn within the clipping region | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/shadows/2d.shadow.clip.2.html | OK | OK | OK | OK | OK | OK |
Shadows are not drawn outside the clipping region | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/shadows/2d.shadow.clip.3.html | OK | OK | OK | OK | OK | OK |
Shadows of clipped shapes are still drawn within the clipping region | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/shadows/2d.shadow.composite.1.html | OK | OK | OK | OK | OK | OK |
Shadows are drawn using globalCompositeOperation | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/shadows/2d.shadow.composite.2.html | OK | OK | OK | OK | OK | OK |
Shadows are drawn using globalCompositeOperation | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/shadows/2d.shadow.composite.3.html | OK | OK | OK | OK | OK | OK |
Areas outside shadows are drawn correctly with destination-out | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/shadows/2d.shadow.enable.blur.html | OK | OK | OK | OK | OK | OK |
Shadows are drawn if shadowBlur is set | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/shadows/2d.shadow.enable.off.1.html | OK | OK | OK | OK | OK | OK |
Shadows are not drawn when only shadowColor is set | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/shadows/2d.shadow.enable.off.2.html | OK | OK | OK | OK | OK | OK |
Shadows are not drawn when only shadowColor is set | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/shadows/2d.shadow.enable.x.html | OK | OK | OK | OK | OK | OK |
Shadows are drawn if shadowOffsetX is set | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/shadows/2d.shadow.enable.y.html | OK | OK | OK | OK | OK | OK |
Shadows are drawn if shadowOffsetY is set | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/shadows/2d.shadow.gradient.alpha.html | OK | OK | OK | OK | OK | OK |
Shadows are drawn correctly for partially-transparent gradient fills | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/shadows/2d.shadow.gradient.basic.html | OK | OK | OK | OK | OK | OK |
Shadows are drawn for gradient fills | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/shadows/2d.shadow.gradient.transparent.1.html | OK | OK | OK | OK | OK | OK |
Shadows are not drawn for transparent gradient fills | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/shadows/2d.shadow.gradient.transparent.2.html | OK | OK | OK | OK | OK | OK |
Shadows are not drawn for transparent parts of gradient fills | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/shadows/2d.shadow.image.alpha.html | OK | OK | OK | OK | OK | OK |
Shadows are drawn correctly for partially-transparent images | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/shadows/2d.shadow.image.basic.html | OK | OK | OK | OK | OK | OK |
Shadows are drawn for images | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/shadows/2d.shadow.image.scale.html | OK | OK | OK | OK | OK | OK |
Shadows are drawn correctly for scaled images | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/shadows/2d.shadow.image.section.html | OK | OK | OK | OK | OK | OK |
Shadows are not drawn for areas outside image source rectangles | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/shadows/2d.shadow.image.transparent.1.html | OK | OK | OK | OK | OK | OK |
Shadows are not drawn for transparent images | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/shadows/2d.shadow.image.transparent.2.html | OK | OK | OK | OK | OK | OK |
Shadows are not drawn for transparent parts of images | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/shadows/2d.shadow.offset.negativeX.html | OK | OK | OK | OK | OK | OK |
Shadows can be offset with negative x | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/shadows/2d.shadow.offset.negativeY.html | OK | OK | OK | OK | OK | OK |
Shadows can be offset with negative y | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/shadows/2d.shadow.offset.positiveX.html | OK | OK | OK | OK | OK | OK |
Shadows can be offset with positive x | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/shadows/2d.shadow.offset.positiveY.html | OK | OK | OK | OK | OK | OK |
Shadows can be offset with positive y | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/shadows/2d.shadow.outside.html | OK | OK | OK | OK | OK | OK |
Shadows of shapes outside the visible area can be offset onto the visible area | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/shadows/2d.shadow.pattern.alpha.html | OK | OK | OK | OK | OK | OK |
Shadows are drawn correctly for partially-transparent fill patterns | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/shadows/2d.shadow.pattern.basic.html | OK | OK | OK | OK | OK | OK |
Shadows are drawn for fill patterns | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/shadows/2d.shadow.pattern.transparent.1.html | OK | OK | OK | OK | OK | OK |
Shadows are not drawn for transparent fill patterns | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/shadows/2d.shadow.pattern.transparent.2.html | OK | OK | OK | OK | OK | OK |
Shadows are not drawn for transparent parts of fill patterns | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/shadows/2d.shadow.stroke.basic.html | OK | OK | OK | OK | OK | OK |
Shadows are drawn for strokes | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/shadows/2d.shadow.stroke.cap.1.html | OK | OK | OK | OK | OK | OK |
Shadows are not drawn for areas outside stroke caps | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/shadows/2d.shadow.stroke.cap.2.html | OK | OK | OK | OK | OK | OK |
Shadows are drawn for stroke caps | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/shadows/2d.shadow.stroke.join.1.html | OK | OK | OK | OK | OK | OK |
Shadows are not drawn for areas outside stroke joins | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/shadows/2d.shadow.stroke.join.2.html | OK | OK | OK | OK | OK | OK |
Shadows are drawn for stroke joins | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/shadows/2d.shadow.stroke.join.3.html | OK | OK | OK | OK | OK | OK |
Shadows are drawn for stroke joins respecting miter limit | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/shadows/2d.shadow.transform.1.html | OK | OK | OK | OK | OK | OK |
Shadows take account of transformations | PASS | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/shadows/2d.shadow.transform.2.html | OK | OK | OK | OK | OK | OK |
Shadow offsets are not affected by transformations | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/text-styles/2d.text.align.default.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.text.align.default | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/text-styles/2d.text.align.invalid.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.text.align.invalid | PASS | PASS | FAIL | FAIL | PASS | PASS |
/2dcontext/text-styles/2d.text.align.valid.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.text.align.valid | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/text-styles/2d.text.baseline.default.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.text.baseline.default | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/text-styles/2d.text.baseline.invalid.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.text.baseline.invalid | PASS | PASS | FAIL | FAIL | PASS | PASS |
/2dcontext/text-styles/2d.text.baseline.valid.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.text.baseline.valid | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/text-styles/2d.text.draw.baseline.bottom.html | OK | OK | OK | OK | OK | OK |
textBaseline bottom is the bottom of the em square (not the bounding box) | FAIL | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/text-styles/2d.text.draw.baseline.hanging.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.text.draw.baseline.hanging | FAIL | FAIL | PASS | PASS | PASS | FAIL |
/2dcontext/text-styles/2d.text.draw.baseline.ideographic.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.text.draw.baseline.ideographic | FAIL | FAIL | PASS | PASS | PASS | FAIL |
/2dcontext/text-styles/2d.text.draw.baseline.middle.html | OK | OK | OK | OK | OK | OK |
textBaseline middle is the middle of the em square (not the bounding box) | FAIL | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/text-styles/2d.text.draw.baseline.top.html | OK | OK | OK | OK | OK | OK |
textBaseline top is the top of the em square (not the bounding box) | FAIL | PASS | PASS | PASS | PASS | FAIL |
/2dcontext/text-styles/2d.text.draw.space.collapse.end.html | OK | OK | OK | OK | OK | OK |
Space characters at the end of a line are collapsed (per CSS) | FAIL | FAIL | PASS | PASS | PASS | FAIL |
/2dcontext/text-styles/2d.text.draw.space.collapse.other.html | OK | OK | OK | OK | OK | OK |
Space characters are converted to U+0020, and collapsed (per CSS) | FAIL | FAIL | PASS | PASS | PASS | FAIL |
/2dcontext/text-styles/2d.text.draw.space.collapse.space.html | OK | OK | OK | OK | OK | OK |
Space characters are converted to U+0020, and collapsed (per CSS) | FAIL | FAIL | PASS | PASS | PASS | FAIL |
/2dcontext/text-styles/2d.text.draw.space.collapse.start.html | OK | OK | OK | OK | OK | OK |
Space characters at the start of a line are collapsed (per CSS) | FAIL | FAIL | PASS | PASS | PASS | FAIL |
/2dcontext/text-styles/2d.text.font.default.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.text.font.default | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/text-styles/2d.text.font.parse.basic.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.text.font.parse.basic | PASS | PASS | FAIL | PASS | PASS | FAIL |
/2dcontext/text-styles/2d.text.font.parse.complex.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.text.font.parse.complex | PASS | FAIL | FAIL | PASS | PASS | FAIL |
/2dcontext/text-styles/2d.text.font.parse.invalid.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.text.font.parse.invalid | PASS | PASS | FAIL | FAIL | PASS | FAIL |
/2dcontext/text-styles/2d.text.font.parse.size.percentage.default.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.text.font.parse.size.percentage.default | PASS | FAIL | FAIL | FAIL | PASS | FAIL |
/2dcontext/text-styles/2d.text.font.parse.size.percentage.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.text.font.parse.size.percentage | PASS | FAIL | FAIL | FAIL | PASS | FAIL |
/2dcontext/text-styles/2d.text.font.parse.system.html | OK | OK | OK | OK | OK | OK |
System fonts must be computed to explicit values | PASS | PASS | FAIL | FAIL | PASS | FAIL |
/2dcontext/text-styles/2d.text.measure.width.space.html | OK | OK | OK | OK | OK | OK |
Space characters are converted to U+0020 and collapsed (per CSS) | FAIL | FAIL | PASS | PASS | PASS | FAIL |
/2dcontext/the-canvas-state/2d.state.saverestore.bitmap.html | OK | OK | OK | OK | OK | OK |
save()/restore() does not affect the current bitmap | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/the-canvas-state/2d.state.saverestore.clip.html | OK | OK | OK | OK | OK | OK |
save()/restore() affects the clipping path | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/the-canvas-state/2d.state.saverestore.fillStyle.html | OK | OK | OK | OK | OK | OK |
save()/restore() works for fillStyle | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/the-canvas-state/2d.state.saverestore.font.html | OK | OK | OK | OK | OK | OK |
save()/restore() works for font | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/the-canvas-state/2d.state.saverestore.globalAlpha.html | OK | OK | OK | OK | OK | OK |
save()/restore() works for globalAlpha | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/the-canvas-state/2d.state.saverestore.globalCompositeOperation.html | OK | OK | OK | OK | OK | OK |
save()/restore() works for globalCompositeOperation | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/the-canvas-state/2d.state.saverestore.lineCap.html | OK | OK | OK | OK | OK | OK |
save()/restore() works for lineCap | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/the-canvas-state/2d.state.saverestore.lineJoin.html | OK | OK | OK | OK | OK | OK |
save()/restore() works for lineJoin | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/the-canvas-state/2d.state.saverestore.lineWidth.html | OK | OK | OK | OK | OK | OK |
save()/restore() works for lineWidth | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/the-canvas-state/2d.state.saverestore.miterLimit.html | OK | OK | OK | OK | OK | OK |
save()/restore() works for miterLimit | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/the-canvas-state/2d.state.saverestore.path.html | OK | OK | OK | OK | OK | OK |
save()/restore() does not affect the current path | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/the-canvas-state/2d.state.saverestore.shadowBlur.html | OK | OK | OK | OK | OK | OK |
save()/restore() works for shadowBlur | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/the-canvas-state/2d.state.saverestore.shadowColor.html | OK | OK | OK | OK | OK | OK |
save()/restore() works for shadowColor | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/the-canvas-state/2d.state.saverestore.shadowOffsetX.html | OK | OK | OK | OK | OK | OK |
save()/restore() works for shadowOffsetX | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/the-canvas-state/2d.state.saverestore.shadowOffsetY.html | OK | OK | OK | OK | OK | OK |
save()/restore() works for shadowOffsetY | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/the-canvas-state/2d.state.saverestore.stack.html | OK | OK | OK | OK | OK | OK |
save()/restore() can be nested as a stack | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/the-canvas-state/2d.state.saverestore.stackdepth.html | OK | OK | OK | OK | OK | OK |
save()/restore() stack depth is not unreasonably limited | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/the-canvas-state/2d.state.saverestore.strokeStyle.html | OK | OK | OK | OK | OK | OK |
save()/restore() works for strokeStyle | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/the-canvas-state/2d.state.saverestore.textAlign.html | OK | OK | OK | OK | OK | OK |
save()/restore() works for textAlign | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/the-canvas-state/2d.state.saverestore.textBaseline.html | OK | OK | OK | OK | OK | OK |
save()/restore() works for textBaseline | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/the-canvas-state/2d.state.saverestore.transformation.html | OK | OK | OK | OK | OK | OK |
save()/restore() affects the current transformation matrix | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/the-canvas-state/2d.state.saverestore.underflow.html | OK | OK | OK | OK | OK | OK |
restore() with an empty stack has no effect | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/transformations/2d.transformation.order.html | OK | OK | OK | OK | OK | OK |
Transformations are applied in the right order | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/transformations/2d.transformation.rotate.direction.html | OK | OK | OK | OK | OK | OK |
rotate() is clockwise | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/transformations/2d.transformation.rotate.nonfinite.html | OK | OK | OK | OK | OK | OK |
rotate() with Infinity/NaN is ignored | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/transformations/2d.transformation.rotate.radians.html | OK | OK | OK | OK | OK | OK |
rotate() uses radians | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/transformations/2d.transformation.rotate.wrap.html | OK | OK | OK | OK | OK | OK |
rotate() wraps large positive values correctly | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/transformations/2d.transformation.rotate.wrapnegative.html | OK | OK | OK | OK | OK | OK |
rotate() wraps large negative values correctly | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/transformations/2d.transformation.rotate.zero.html | OK | OK | OK | OK | OK | OK |
rotate() by 0 does nothing | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/transformations/2d.transformation.scale.basic.html | OK | OK | OK | OK | OK | OK |
scale() works | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/transformations/2d.transformation.scale.large.html | OK | OK | OK | OK | OK | OK |
scale() with large scale factors works | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/transformations/2d.transformation.scale.multiple.html | OK | OK | OK | OK | OK | OK |
Multiple scale()s combine | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/transformations/2d.transformation.scale.negative.html | OK | OK | OK | OK | OK | OK |
scale() with negative scale factors works | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/transformations/2d.transformation.scale.nonfinite.html | OK | OK | OK | OK | OK | OK |
scale() with Infinity/NaN is ignored | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/transformations/2d.transformation.scale.zero.html | OK | OK | OK | OK | OK | OK |
scale() with a scale factor of zero works | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/transformations/2d.transformation.setTransform.multiple.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.transformation.setTransform.multiple | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/transformations/2d.transformation.setTransform.nonfinite.html | OK | OK | OK | OK | OK | OK |
setTransform() with Infinity/NaN is ignored | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/transformations/2d.transformation.setTransform.skewed.html | OK | OK | OK | OK | OK | OK |
Canvas test: 2d.transformation.setTransform.skewed | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/transformations/2d.transformation.transform.identity.html | OK | OK | OK | OK | OK | OK |
transform() with the identity matrix does nothing | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/transformations/2d.transformation.transform.multiply.html | OK | OK | OK | OK | OK | OK |
transform() multiplies the CTM | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/transformations/2d.transformation.transform.nonfinite.html | OK | OK | OK | OK | OK | OK |
transform() with Infinity/NaN is ignored | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/transformations/2d.transformation.transform.skewed.html | OK | OK | OK | OK | OK | OK |
transform() with skewy matrix transforms correctly | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/transformations/2d.transformation.translate.basic.html | OK | OK | OK | OK | OK | OK |
translate() works | PASS | PASS | PASS | PASS | PASS | PASS |
/2dcontext/transformations/2d.transformation.translate.nonfinite.html | OK | OK | OK | OK | OK | OK |
translate() with Infinity/NaN is ignored | PASS | PASS | PASS | PASS | PASS | PASS |