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