| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../../http/tests/inspector/resources/inspector-test.js"></script> |
| <script> |
| function triggerCreateStringObject() { |
| window.myString = "This is the test string."; |
| } |
| |
| function triggerCreateFunctionObject() { |
| window.myFunction = function myFunctionName(alpha, beta) { |
| return alpha * beta; |
| }; |
| } |
| |
| function triggerCreateMapObject() { |
| window.myMap = new Map; |
| myMap.set("key", "value"); |
| } |
| |
| function triggerDeleteMapObject() { |
| window.myMap = null; |
| } |
| |
| function test() |
| { |
| let suite = InspectorTest.createAsyncSuite("Heap.getPreview"); |
| |
| function jsonFilter(key, value) { |
| if (key === "scriptId") |
| return "<filtered>"; |
| return value; |
| } |
| |
| suite.addTestCase({ |
| name: "GetPreviewNoSnapshot", |
| description: "Calling Heap.getPreview when no snapshot exists should result in an error.", |
| test(resolve, reject) { |
| HeapAgent.getPreview(1, (error, string, functionDetails, objectPreviewPayload) => { |
| InspectorTest.expectThat(error, "Should get an error when no snapshot exists."); |
| InspectorTest.pass(error); |
| resolve(); |
| }); |
| } |
| }); |
| |
| suite.addTestCase({ |
| name: "GetPreviewForString", |
| description: "Calling Heap.getPreview for a live string should return the value of that string.", |
| test(resolve, reject) { |
| HeapAgent.snapshot((error, timestamp, snapshotStringData) => { // All pre-existing objects. |
| InspectorTest.evaluateInPage("triggerCreateStringObject()"); |
| HeapAgent.snapshot((error, timestamp, snapshotStringData) => { // Newly created objects. |
| InspectorTest.expectThat(!error, "Should not have an error creating a snapshot."); |
| let workerProxy = WI.HeapSnapshotWorkerProxy.singleton(); |
| workerProxy.createSnapshot(snapshotStringData, ({objectId, snapshot: serializedSnapshot}) => { |
| let snapshot = WI.HeapSnapshotProxy.deserialize(objectId, serializedSnapshot); |
| snapshot.instancesWithClassName("string", (strings) => { |
| let heapSnapshotNode = strings.reduce((result, x) => result.id < x.id ? x : result, strings[0]); |
| HeapAgent.getPreview(heapSnapshotNode.id, (error, string, functionDetails, objectPreviewPayload) => { |
| InspectorTest.expectThat(!error, "Should not have an error getting preview."); |
| InspectorTest.log("STRING: " + string); |
| resolve(); |
| }); |
| }); |
| }); |
| }); |
| }); |
| } |
| }); |
| |
| suite.addTestCase({ |
| name: "GetPreviewForFunction", |
| description: "Calling Heap.getPreview for a live Function should return function details for that value.", |
| test(resolve, reject) { |
| HeapAgent.snapshot((error, timestamp, snapshotStringData) => { // All pre-existing objects. |
| InspectorTest.evaluateInPage("triggerCreateFunctionObject()"); |
| HeapAgent.snapshot((error, timestamp, snapshotStringData) => { // Newly created objects. |
| InspectorTest.expectThat(!error, "Should not have an error creating a snapshot."); |
| let workerProxy = WI.HeapSnapshotWorkerProxy.singleton(); |
| workerProxy.createSnapshot(snapshotStringData, ({objectId, snapshot: serializedSnapshot}) => { |
| let snapshot = WI.HeapSnapshotProxy.deserialize(objectId, serializedSnapshot); |
| snapshot.instancesWithClassName("Function", (functions) => { |
| let heapSnapshotNode = functions.reduce((result, x) => result.id < x.id ? x : result, functions[0]); |
| HeapAgent.getPreview(heapSnapshotNode.id, (error, string, functionDetails, objectPreviewPayload) => { |
| InspectorTest.expectThat(!error, "Should not have an error getting preview."); |
| InspectorTest.log("FUNCTION DETAILS: " + JSON.stringify(functionDetails, jsonFilter, 4)); |
| resolve(); |
| }); |
| }); |
| }); |
| }); |
| }); |
| } |
| }); |
| |
| suite.addTestCase({ |
| name: "GetPreviewForObject", |
| description: "Calling Heap.getPreview for a live Object should return an object preview for that value.", |
| test(resolve, reject) { |
| HeapAgent.snapshot((error, timestamp, snapshotStringData) => { // All pre-existing objects. |
| InspectorTest.evaluateInPage("triggerCreateMapObject()"); |
| HeapAgent.snapshot((error, timestamp, snapshotStringData) => { // Newly created objects. |
| InspectorTest.expectThat(!error, "Should not have an error creating a snapshot."); |
| let workerProxy = WI.HeapSnapshotWorkerProxy.singleton(); |
| workerProxy.createSnapshot(snapshotStringData, ({objectId, snapshot: serializedSnapshot}) => { |
| let snapshot = WI.HeapSnapshotProxy.deserialize(objectId, serializedSnapshot); |
| snapshot.instancesWithClassName("Map", (maps) => { |
| let heapSnapshotNode = maps.reduce((result, x) => result.id < x.id ? x : result, maps[0]); |
| HeapAgent.getPreview(heapSnapshotNode.id, (error, string, functionDetails, objectPreviewPayload) => { |
| InspectorTest.expectThat(!error, "Should not have an error getting preview."); |
| InspectorTest.log("OBJECT PREVIEW: " + JSON.stringify(objectPreviewPayload, jsonFilter, 4)); |
| resolve(); |
| }); |
| }); |
| }); |
| }); |
| }); |
| } |
| }); |
| |
| suite.addTestCase({ |
| name: "GetPreviewBadIdentifier", |
| description: "Calling Heap.getPreview with a bad identifier should result in an error.", |
| test(resolve, reject) { |
| HeapAgent.snapshot((error, timestamp, snapshotStringData) => { |
| InspectorTest.expectThat(!error, "Should not have an error creating a snapshot."); |
| HeapAgent.getPreview(9999999, (error, string, functionDetails, objectPreviewPayload) => { |
| InspectorTest.expectThat(error, "Should get an error when no object for identifier exists."); |
| InspectorTest.pass(error); |
| resolve(); |
| }); |
| }); |
| } |
| }); |
| |
| suite.addTestCase({ |
| name: "GetRemoteObjectCollectedObject", |
| description: "Calling Heap.getRemoteObject for an object that has been collected should result in an error.", |
| test(resolve, reject) { |
| HeapAgent.snapshot((error, timestamp, snapshotStringData) => { // All pre-existing objects. |
| InspectorTest.evaluateInPage("triggerCreateMapObject()"); |
| HeapAgent.snapshot((error, timestamp, snapshotStringData) => { // Newly created objects. |
| InspectorTest.expectThat(!error, "Should not have an error creating a snapshot."); |
| let workerProxy = WI.HeapSnapshotWorkerProxy.singleton(); |
| workerProxy.createSnapshot(snapshotStringData, ({objectId, snapshot: serializedSnapshot}) => { |
| let snapshot = WI.HeapSnapshotProxy.deserialize(objectId, serializedSnapshot); |
| |
| InspectorTest.evaluateInPage("triggerDeleteMapObject()"); |
| HeapAgent.gc(); |
| |
| snapshot.instancesWithClassName("Map", (maps) => { |
| let heapSnapshotNode = maps.reduce((result, x) => result.id < x.id ? x : result, maps[0]); |
| HeapAgent.getPreview(heapSnapshotNode.id, (error, string, functionDetails, objectPreviewPayload) => { |
| InspectorTest.expectThat(error, "Should get an error when object has been collected."); |
| InspectorTest.pass(error); |
| resolve(); |
| }); |
| }); |
| }); |
| }); |
| }); |
| } |
| }); |
| |
| suite.runTestCasesAndFinish(); |
| } |
| </script> |
| </head> |
| <body onload="runTest()"> |
| <p>Test for the Heap.getRemoteObject command.</p> |
| </body> |
| </html> |