| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../../http/tests/inspector/resources/protocol-test.js"></script> |
| <script> |
| class Parent { |
| constructor() |
| { |
| this.x = 1; |
| } |
| }; |
| |
| class Child extends Parent { |
| constructor() |
| { |
| console.log("before super"); |
| debugger; |
| super(); |
| console.log("after super"); |
| } |
| }; |
| |
| function triggerPause() { |
| new Child; |
| } |
| |
| function test() |
| { |
| InspectorProtocol.sendCommand("Debugger.enable", {}); |
| InspectorProtocol.sendCommand("Debugger.setBreakpointsActive", {active: true}); |
| |
| let suite = ProtocolTest.createAsyncSuite("PauseInConstructorBeforeSuper"); |
| |
| suite.addTestCase({ |
| name: "TriggerPauseInConstructorBeforeSuper", |
| description: "Trigger a pause in a constructor before calling super should not crash.", |
| test(resolve, reject) { |
| ProtocolTest.evaluateInPage("triggerPause()"); |
| |
| InspectorProtocol.eventHandler["Debugger.paused"] = (messageObject) => { |
| ProtocolTest.pass("Paused"); |
| |
| let callFrameIdentifier = messageObject.params.callFrames[0].callFrameId; |
| InspectorProtocol.sendCommand("Debugger.evaluateOnCallFrame", {callFrameId: callFrameIdentifier, expression: "this"}, (messageObject) => { |
| ProtocolTest.expectThat(messageObject.result.result.type === "undefined", "`this` should be undefined and not cause a crash."); |
| }); |
| |
| InspectorProtocol.sendCommand("Debugger.resume"); |
| }; |
| |
| InspectorProtocol.eventHandler["Debugger.resumed"] = (messageObject) => { |
| ProtocolTest.pass("Resumed"); |
| resolve(); |
| }; |
| } |
| }); |
| |
| suite.runTestCasesAndFinish(); |
| } |
| </script> |
| </head> |
| <body onload="runTest()"> |
| <p>Pause in constructor before super should not crash.</p> |
| </body> |
| </html> |