Implementation Report

Summary

The following tests failed to pass in all UAs:

Full Results

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