| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../../http/tests/inspector/resources/inspector-test.js"></script> |
| <script> |
| |
| function createDetachedTest() |
| { |
| let div = document.createElement("div"); |
| div.id = "detached"; |
| return div; |
| } |
| |
| function testHTMLImageElement() { |
| // 2x2 red square |
| let image = document.createElement("img"); |
| image.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAABNJREFUCB1j/M/AAEQMDEwgAgQAHxcCAmtAm/sAAAAASUVORK5CYII="; |
| image.addEventListener("load", async (event) => { |
| console.screenshot(image); |
| }); |
| } |
| |
| function testHTMLPictureElement() { |
| let picture = document.createElement("picture"); |
| |
| // 2x2 red square |
| let image = picture.appendChild(document.createElement("img")); |
| image.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAABNJREFUCB1j/M/AAEQMDEwgAgQAHxcCAmtAm/sAAAAASUVORK5CYII="; |
| image.addEventListener("load", async (event) => { |
| console.screenshot(picture); |
| }); |
| } |
| |
| function testHTMLCanvasElement() { |
| let canvas = document.createElement("canvas"); |
| canvas.width = 2; |
| canvas.height = 2; |
| |
| let context = canvas.getContext("2d"); |
| context.fillStyle = "red"; |
| context.fillRect(0, 0, 2, 2); |
| |
| console.screenshot(canvas); |
| } |
| |
| function testImageBitmap() { |
| // 2x2 red square |
| let image = document.createElement("img"); |
| image.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAABNJREFUCB1j/M/AAEQMDEwgAgQAHxcCAmtAm/sAAAAASUVORK5CYII="; |
| image.addEventListener("load", async (event) => { |
| let imageBitmap = await createImageBitmap(image); |
| console.screenshot(imageBitmap); |
| }); |
| } |
| |
| function createCanvas2DTest() { |
| let canvas = document.createElement("canvas"); |
| canvas.width = 2; |
| canvas.height = 2; |
| return canvas.getContext("2d"); |
| } |
| |
| function test() |
| { |
| let suite = InspectorTest.createAsyncSuite("console.screenshot"); |
| |
| function addTest({name, expression, imageMessageAddedCallback, shouldCaptureViewport, shouldError}) { |
| suite.addTestCase({ |
| name, |
| async test() { |
| let [event] = await Promise.all([ |
| WI.consoleManager.awaitEvent(WI.ConsoleManager.Event.MessageAdded), |
| InspectorTest.evaluateInPage(expression), |
| ]); |
| |
| let {message} = event.data; |
| |
| if (message.level === WI.ConsoleMessage.MessageLevel.Error) { |
| InspectorTest.expectThat(shouldError, "Error: " + message.messageText); |
| return; |
| } |
| |
| InspectorTest.expectEqual(message.type, WI.ConsoleMessage.MessageType.Image, "The added message should be an image."); |
| InspectorTest.expectNotEqual(message.messageText, "data:", "The image should not be empty."); |
| |
| try { |
| let image = new Image; |
| await new Promise((resolve, reject) => { |
| image.addEventListener("load", resolve); |
| image.addEventListener("error", reject); |
| image.src = message.messageText; |
| }); |
| |
| if (shouldCaptureViewport) { |
| InspectorTest.expectGreaterThan(image.width, 2, "The image width should be greater than 2px."); |
| InspectorTest.expectGreaterThan(image.height, 2, "The image height should be greater than 2px."); |
| } else { |
| InspectorTest.expectEqual(image.width, 2, "The image width should be 2px."); |
| InspectorTest.expectEqual(image.height, 2, "The image height should be 2px."); |
| } |
| } catch { |
| InspectorTest.expectThat(shouldError, "The image should not load."); |
| } |
| }, |
| }); |
| } |
| |
| addTest({ |
| name: "console.screenshot.Node.SingleArgument", |
| expression: `console.screenshot(document.querySelector("#testNode"))`, |
| }); |
| |
| addTest({ |
| name: "console.screenshot.Node.MultipleArguments", |
| expression: `console.screenshot(document.querySelector("#testNode"), "test")`, |
| }); |
| |
| addTest({ |
| name: "console.screenshot.Node.DetachedScreenshotable.Image", |
| expression: `testHTMLImageElement()`, |
| }); |
| |
| addTest({ |
| name: "console.screenshot.Node.DetachedScreenshotable.Picture", |
| expression: `testHTMLPictureElement()`, |
| }); |
| |
| addTest({ |
| name: "console.screenshot.Node.DetachedScreenshotable.Canvas", |
| expression: `testHTMLCanvasElement()`, |
| async imageMessageAddedCallback(message) { |
| InspectorTest.expectNotEqual(message.messageText, "data:", "The image should not be empty."); |
| |
| let img = await WI.ImageUtilities.promisifyLoad(message.messageText); |
| InspectorTest.expectEqual(img.width, 2, "The image width should be 2px."); |
| InspectorTest.expectEqual(img.height, 2, "The image height should be 2px."); |
| }, |
| }); |
| |
| addTest({ |
| name: "console.screenshot.Node.DetachedNonScreenshotable", |
| expression: `console.screenshot(createDetachedTest())`, |
| shouldError: true, |
| }); |
| |
| addTest({ |
| name: "console.screenshot.ImageData", |
| expression: `console.screenshot(new ImageData(2, 2))`, |
| }); |
| |
| addTest({ |
| name: "console.screenshot.ImageBitmap", |
| expression: `testImageBitmap()`, |
| }); |
| |
| addTest({ |
| name: "console.screenshot.CanvasRenderingContext2D", |
| expression: `console.screenshot(createCanvas2DTest())`, |
| }); |
| |
| addTest({ |
| name: "console.screenshot.String.Valid", |
| expression: `console.screenshot("test")`, |
| shouldCaptureViewport: true, |
| }); |
| |
| addTest({ |
| name: "console.screenshot.String.dataURL.Valid", |
| expression: `console.screenshot("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAABNJREFUCB1j/M/AAEQMDEwgAgQAHxcCAmtAm/sAAAAASUVORK5CYII=")`, // 2x2 red square |
| }); |
| |
| addTest({ |
| name: "console.screenshot.String.dataURL.InvalidMIME", |
| expression: `console.screenshot("data:fake/mime")`, |
| shouldError: true, |
| }); |
| |
| addTest({ |
| name: "console.screenshot.String.dataURL.InvalidContent", |
| expression: `console.screenshot("data:image/png;base64,<INVALID>")`, |
| shouldError: true, |
| }); |
| |
| addTest({ |
| name: "console.screenshot.String.dataURL.InvalidNoContent", |
| expression: `console.screenshot("data:image/png;a1=b2;base64,")`, |
| shouldError: true, |
| }); |
| |
| addTest({ |
| name: "console.screenshot.String.dataURL.ValidNoContent", |
| expression: `console.screenshot("data:")`, |
| shouldCaptureViewport: true, |
| }); |
| |
| addTest({ |
| name: "console.screenshot.NonScreenshotableTarget", |
| expression: `console.screenshot(42)`, |
| shouldCaptureViewport: true, |
| }); |
| |
| addTest({ |
| name: "console.screenshot.NoArguments", |
| expression: `console.screenshot()`, |
| shouldCaptureViewport: true, |
| }); |
| |
| suite.runTestCasesAndFinish(); |
| } |
| </script> |
| </head> |
| <body onload="runTest()"> |
| <p>Tests for the console.screenshot API.</p> |
| <div id="testNode"></div> |
| <style> |
| #testNode { |
| width: 2px; |
| height: 2px; |
| background-color: red; |
| } |
| #detached { |
| width: 2px; |
| height: 2px; |
| background-color: blue; |
| } |
| </style> |
| </body> |
| </html> |