| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../../http/tests/inspector/resources/inspector-test.js"></script> |
| <script src="resources/recording-utilities.js"></script> |
| <script src="resources/recording-2d.js"></script> |
| <script> |
| function test() { |
| let suite = InspectorTest.createAsyncSuite("Canvas.recording2D"); |
| |
| suite.addTestCase({ |
| name: "Canvas.recording2D.ExistingSaves", |
| description: "Check that existing save calls are sent to the frontend.", |
| test(resolve, reject) { |
| let canvas = getCanvas(WI.Canvas.ContextType.Canvas2D); |
| if (!canvas) { |
| reject("Missing 2D canvas."); |
| return; |
| } |
| |
| async function logStates(recording) { |
| function check(index, state, name, expected) { |
| InspectorTest.expectEqual("" + state.get(name), "" + expected, `State ${index} ${name} value should be ${expected}.`) |
| } |
| async function compare(index, transform, globalAlpha, globalCompositeOperation, lineWidth, lineCap, lineJoin, miterLimit, shadowOffsetX, shadowOffsetY, shadowBlur, shadowColor, lineDash, lineDashOffset, font, textAlign, textBaseline, direction, strokeStyle, fillStyle, imageSmoothingEnabled, imageSmoothingQuality, path) { |
| let state = await WI.RecordingState.swizzleInitialState(recording, recording.initialState.states[index]); |
| check(index, state, "setTransform", transform) |
| check(index, state, "globalAlpha", globalAlpha) |
| check(index, state, "globalCompositeOperation", globalCompositeOperation) |
| check(index, state, "lineWidth", lineWidth) |
| check(index, state, "lineCap", lineCap) |
| check(index, state, "lineJoin", lineJoin) |
| check(index, state, "miterLimit", miterLimit) |
| check(index, state, "shadowOffsetX", shadowOffsetX) |
| check(index, state, "shadowOffsetY", shadowOffsetY) |
| check(index, state, "shadowBlur", shadowBlur) |
| check(index, state, "shadowColor", shadowColor) |
| check(index, state, "setLineDash", lineDash) |
| check(index, state, "lineDashOffset", lineDashOffset) |
| check(index, state, "font", font) |
| check(index, state, "textAlign", textAlign) |
| check(index, state, "textBaseline", textBaseline) |
| check(index, state, "direction", direction) |
| check(index, state, "strokeStyle", strokeStyle) // FIXME: Might want to do a better job at stringifying gradients and patterns for a better test. |
| check(index, state, "fillStyle", fillStyle) // FIXME: Might want to do a better job at stringifying gradients and patterns for a better test. |
| check(index, state, "imageSmoothingEnabled", imageSmoothingEnabled) |
| check(index, state, "imageSmoothingQuality", imageSmoothingQuality) |
| check(index, state, "setPath", path) // FIXME: Need to do a better job at stringifying a path for a useful test. |
| } |
| |
| await compare(0, "matrix(1, 0, 0, 1, 0, 0)", 1, "source-over", 1, "butt", "miter", 10, 0, 0, 0, "rgba(0, 0, 0, 0)", "", 0, "10px sans-serif", "start", "alphabetic", "inherit", "#000000", "#000000", true, "low", "[object Path2D]") |
| await compare(1, "matrix(1, 0, 0, 1, 1, 0)", 0.5, "source-in", 0.5, "round", "bevel", 20, 2, 3, 4, "#100000", "1,2", 10, "20px sans-serif", "left", "top", "ltr", "[object CanvasPattern]", "[object CanvasGradient]", false, "medium", "[object Path2D]") |
| await compare(2, "matrix(1, 0, 0, 1, 1, 1)", 0, "difference", 2, "square", "round", 30, 4, 5, 6, "#001000", "3,4", 11, "30px cursive", "right", "hanging", "inherit", "[object CanvasGradient]", "[object CanvasPattern]", true, "high", "[object Path2D]") |
| await compare(3, "matrix(1, 0, 0, 1, 0, -1)", 0.75, "source-over", 3, "round", "bevel", 40, 6, 7, 8, "#000010", "5,6", 12, "40px fantasy", "center", "ideographic", "rtl", "#200000", "#300000", false, "medium", "[object Path2D]") |
| } |
| |
| canvas.awaitEvent(WI.Canvas.Event.RecordingStopped) |
| .then((event) => { |
| let {recording} = event.data; |
| |
| InspectorTest.expectEqual(recording.initialState.states.length, 4, "There should be 4 existing states."); |
| |
| logStates(recording) |
| .then(resolve, reject); |
| }); |
| |
| canvas.awaitEvent(WI.Canvas.Event.RecordingStarted) |
| .then((event) => { |
| InspectorTest.evaluateInPage(`performSavePostActions()`).catch(reject); |
| }); |
| |
| InspectorTest.evaluateInPage(`performSavePreActions()`) |
| .then(() => { |
| const frameCount = 1; |
| CanvasAgent.startRecording(canvas.identifier, frameCount).catch(reject); |
| }, reject); |
| }, |
| }); |
| |
| suite.runTestCasesAndFinish(); |
| } |
| </script> |
| </head> |
| <body onload="load()"> |
| <p>Test that CanvasManager is able to record actions made to 2D canvas contexts.</p> |
| </body> |
| </html> |