| <!doctype html> |
| <html> |
| <head> |
| <script src="../../http/tests/inspector/resources/inspector-test.js"></script> |
| <script> |
| function triggerConsoleMessage() { |
| let script = document.createElement("script"); |
| script.textContent = "//# sourceURL=inline-script.js\neval('function foo() { console.trace(); }; foo();')"; |
| document.body.appendChild(script); |
| } |
| |
| function test() |
| { |
| function logStackTrace(stackTrace) { |
| InspectorTest.log(`StackTrace: ${stackTrace.callFrames.length}`); |
| for (let i = 0; i < stackTrace.callFrames.length; ++i) { |
| let callFrame = stackTrace.callFrames[i]; |
| let string = ` ${i + 1}: ${callFrame.functionName}`; |
| if (callFrame.sourceCodeLocation) |
| string += ` (${callFrame.sourceCodeLocation.originalLocationString()})`; |
| string += " -"; |
| string += ` nativeCode (${callFrame.nativeCode})`; |
| string += ` programCode (${callFrame.programCode})`; |
| InspectorTest.log(string); |
| } |
| } |
| |
| let suite = InspectorTest.createAsyncSuite("WI.StackTrace"); |
| |
| suite.addTestCase({ |
| name: "WI.ConsoleMessage.StackTrace", |
| description: "Test we can create a StackTrace from console messages (Console.StackTrace).", |
| test(resolve, reject) { |
| WI.consoleManager.awaitEvent(WI.ConsoleManager.Event.MessageAdded) |
| .then((event) => { |
| // Trace message should always have a stack trace. |
| let consoleMessage = event.data.message; |
| let stackTrace = consoleMessage.stackTrace; |
| InspectorTest.expectThat(consoleMessage.type === WI.ConsoleMessage.MessageType.Trace, "ConsoleMessage type should be Trace."); |
| InspectorTest.expectThat(stackTrace instanceof WI.StackTrace, "ConsoleMessage should have StackTrace."); |
| |
| // Console message stack trace call frame's do not have debugging information. |
| InspectorTest.expectThat(stackTrace.callFrames[0].id === null, "CallFrame in StackTrace has no identifier."); |
| InspectorTest.expectThat(stackTrace.callFrames[0].thisObject === null, "CallFrame in StackTrace has no thisObject."); |
| InspectorTest.expectThat(!stackTrace.callFrames[0].scopeChain.length, "CallFrame in StackTrace has no scopeChain."); |
| |
| logStackTrace(consoleMessage.stackTrace); |
| }) |
| .then(resolve, reject); |
| |
| InspectorTest.evaluateInPage("triggerConsoleMessage()"); |
| } |
| }); |
| |
| suite.runTestCasesAndFinish(); |
| } |
| </script> |
| </head> |
| <body onload="runTest()"> |
| <p>Tests for the WI.StackTrace model object.</p> |
| </body> |
| </html> |