88 lines
5.1 KiB
HTML
88 lines
5.1 KiB
HTML
<!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>
|