| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../../http/tests/inspector/resources/inspector-test.js"></script> |
| <script> |
| function test() |
| { |
| let suite = InspectorTest.createAsyncSuite("Runtime.getPreview"); |
| |
| // ------ RemoteObject.prototype.updatePreview |
| |
| suite.addTestCase({ |
| name: "RemoteObject.updatePreview.ObjectWithoutPreview", |
| description: "Should be able to update the preview of a RemoteObject without a preview.", |
| test(resolve, reject) { |
| RuntimeAgent.evaluate.invoke({expression: `({a:1, b:2})`, objectGroup: "test", generatePreview: false}, (error, remoteObjectPayload) => { |
| InspectorTest.assert(!error, "Should not be a protocol error."); |
| let remoteObject = WI.RemoteObject.fromPayload(remoteObjectPayload); |
| InspectorTest.expectThat(!remoteObject.preview, "RemoteObject should not have a preview."); |
| InspectorTest.expectThat(remoteObject.canLoadPreview(), "RemoteObject should be able to load a preview."); |
| remoteObject.updatePreview((preview) => { |
| InspectorTest.expectThat(preview instanceof WI.ObjectPreview, "RemoteObject.updatePreview should produce an ObjectPreview."); |
| InspectorTest.expectEqual(remoteObject.preview, preview, "RemoteObject.preview should be the same object as the callback."); |
| InspectorTest.expectEqual(remoteObject.preview.propertyPreviews.length, 2, "Preview should have 2 properties."); |
| resolve(); |
| }); |
| }); |
| } |
| }); |
| |
| suite.addTestCase({ |
| name: "RemoteObject.updatePreview.ObjectWithPreview", |
| description: "Should be able to update the preview of a RemoteObject with a preview.", |
| test(resolve, reject) { |
| RuntimeAgent.evaluate.invoke({expression: `window.alpha = ({a:1, b:2, c:3})`, objectGroup: "test", generatePreview: true}, (error, remoteObjectPayload) => { |
| InspectorTest.assert(!error, "Should not be a protocol error."); |
| let remoteObject = WI.RemoteObject.fromPayload(remoteObjectPayload); |
| let originalPreview = remoteObject.preview; |
| InspectorTest.expectThat(remoteObject.preview, "RemoteObject should have a preview."); |
| InspectorTest.expectThat(remoteObject.canLoadPreview(), "RemoteObject should be able to load a preview."); |
| InspectorTest.expectEqual(originalPreview.propertyPreviews.length, 3, "Original preview should have 3 properties."); |
| InspectorTest.evaluateInPage(`window.alpha.d = 4`, () => { |
| remoteObject.updatePreview((preview) => { |
| InspectorTest.expectThat(preview instanceof WI.ObjectPreview, "RemoteObject.updatePreview should produce an ObjectPreview."); |
| InspectorTest.expectEqual(remoteObject.preview, preview, "RemoteObject.preview should be the same object as the callback."); |
| InspectorTest.expectEqual(remoteObject.preview.propertyPreviews.length, 4, "Preview should now have 4 properties."); |
| resolve(); |
| }); |
| }); |
| }); |
| } |
| }); |
| |
| suite.addTestCase({ |
| name: "RemoteObject.updatePreview.NonObject", |
| description: "Non-object RemoteObjects should not request a preview.", |
| test(resolve, reject) { |
| function testRemoteObject(remoteObject, preferredTypeName) { |
| InspectorTest.expectThat(!remoteObject.canLoadPreview(), `Should not be able to load a preview for a ${preferredTypeName || remoteObject.type} RemoteObject.`); |
| remoteObject.updatePreview((preview) => { |
| InspectorTest.expectNull(preview, `RemoteObject.updatePreview should return null for a ${preferredTypeName || remoteObject.type} RemoteObject.`); |
| }); |
| } |
| |
| testRemoteObject(WI.RemoteObject.fromPrimitiveValue(true)); |
| testRemoteObject(WI.RemoteObject.fromPrimitiveValue(100)); |
| testRemoteObject(WI.RemoteObject.fromPrimitiveValue("str")); |
| testRemoteObject(WI.RemoteObject.createFakeRemoteObject(), "fake object"); |
| InspectorBackend.runAfterPendingDispatches(resolve); |
| } |
| }); |
| |
| suite.addTestCase({ |
| name: "RemoteObject.updatePreview.Symbol", |
| description: "Non-object RemoteObjects should not request a preview.", |
| test(resolve, reject) { |
| InspectorTest.evaluateInPage(`Symbol.iterator`, (error, remoteObject) => { |
| InspectorTest.expectThat(!remoteObject.canLoadPreview(), `Should not be able to load a preview for a ${remoteObject.type} RemoteObject.`); |
| remoteObject.updatePreview((preview) => { |
| InspectorTest.expectNull(preview, `RemoteObject.updatePreview should return null for a ${remoteObject.type} RemoteObject.`); |
| resolve(); |
| }); |
| }); |
| } |
| }); |
| |
| suite.addTestCase({ |
| name: "RemoteObject.updatePreview.Function", |
| description: "Non-object RemoteObjects should not request a preview.", |
| test(resolve, reject) { |
| InspectorTest.evaluateInPage(`function f() {}; f`, (error, remoteObject) => { |
| InspectorTest.expectThat(!remoteObject.canLoadPreview(), `Should not be able to load a preview for a ${remoteObject.type} RemoteObject.`); |
| remoteObject.updatePreview((preview) => { |
| InspectorTest.expectNull(preview, `RemoteObject.updatePreview should return null for a ${remoteObject.type} RemoteObject.`); |
| resolve(); |
| }); |
| }); |
| } |
| }); |
| |
| suite.addTestCase({ |
| name: "RemoteObject.updatePreview.Null", |
| description: "Non-object RemoteObjects should not request a preview.", |
| test(resolve, reject) { |
| InspectorTest.evaluateInPage(`null`, (error, remoteObject) => { |
| InspectorTest.expectThat(!remoteObject.canLoadPreview(), `Should not be able to load a preview for a ${remoteObject.subtype} RemoteObject.`); |
| remoteObject.updatePreview((preview) => { |
| InspectorTest.expectNull(preview, `RemoteObject.updatePreview should return null for a ${remoteObject.subtype} RemoteObject.`); |
| resolve(); |
| }); |
| }, {remoteObjectOnly: true}); |
| } |
| }); |
| |
| // ------ Runtime.getPreview |
| |
| suite.addTestCase({ |
| name: "Runtime.getPreview.Symbol", |
| description: "Runtime.getPreview should return an empty preview for non-objects.", |
| test(resolve, reject) { |
| InspectorTest.evaluateInPage(`Symbol.iterator`, (error, remoteObject) => { |
| RuntimeAgent.getPreview(remoteObject.objectId, (error, result) => { |
| InspectorTest.log(JSON.stringify(result)); |
| resolve(); |
| }); |
| }); |
| } |
| }); |
| |
| suite.addTestCase({ |
| name: "Runtime.getPreview.Function", |
| description: "Runtime.getPreview should return an empty preview for non-objects.", |
| test(resolve, reject) { |
| InspectorTest.evaluateInPage(`function f() {}; f`, (error, remoteObject) => { |
| RuntimeAgent.getPreview(remoteObject.objectId, (error, result) => { |
| InspectorTest.log(JSON.stringify(result)); |
| resolve(); |
| }); |
| }); |
| } |
| }); |
| |
| // ------ |
| |
| suite.addTestCase({ |
| name: "Runtime.getPreview.InvalidObjectId", |
| description: "Invalid objectId should produce and error.", |
| test(resolve, reject) { |
| const objectId = "DOES_NOT_EXIST"; |
| RuntimeAgent.getPreview(objectId, (error) => { |
| InspectorTest.expectThat(error, "Should produce an error."); |
| InspectorTest.log("Error: " + error); |
| resolve(); |
| }); |
| } |
| }); |
| |
| suite.runTestCasesAndFinish(); |
| } |
| </script> |
| </head> |
| <body onload="runTest()"> |
| <p>Tests for the Runtime.getPreview command and associated RemoteObject.prototype.updatePreview.</p> |
| </body> |
| </html> |