| // Copyright 2020 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Flags: --harmony-private-methods |
| |
| let { session, contextGroup, Protocol } = InspectorTest.start( |
| "Test accessing unused private methods at runtime" |
| ); |
| |
| const script = ` |
| function run() { |
| class A { |
| #instanceMethod() { return 2; } |
| static #staticMethod() { return 1; } |
| static testStatic() { debugger; } |
| testInstance() { debugger; } |
| }; |
| A.testStatic(); |
| const a = new A; |
| a.testInstance(); |
| }`; |
| |
| contextGroup.addScript(script); |
| |
| InspectorTest.runAsyncTestSuite([ |
| async function testScopesPaused() { |
| Protocol.Debugger.enable(); |
| |
| // Do not await here, instead oncePaused should be awaited. |
| Protocol.Runtime.evaluate({ expression: 'run()' }); |
| |
| InspectorTest.log('Get privateProperties of A in testStatic()'); |
| let { |
| params: { callFrames } |
| } = await Protocol.Debugger.oncePaused(); // inside A.testStatic() |
| let frame = callFrames[0]; |
| let { result } = await Protocol.Runtime.getProperties({ |
| objectId: frame.this.objectId |
| }); |
| InspectorTest.logMessage(result.privateProperties); |
| |
| // Variables not referenced in the source code are currently |
| // considered "optimized away". |
| InspectorTest.log('Access A.#staticMethod() in testStatic()'); |
| ({ result } = await Protocol.Debugger.evaluateOnCallFrame({ |
| expression: 'A.#staticMethod();', |
| callFrameId: callFrames[0].callFrameId |
| })); |
| InspectorTest.logMessage(result); |
| |
| InspectorTest.log('Access this.#staticMethod() in testStatic()'); |
| ({ result } = await Protocol.Debugger.evaluateOnCallFrame({ |
| expression: 'this.#staticMethod();', |
| callFrameId: callFrames[0].callFrameId |
| })); |
| InspectorTest.logMessage(result); |
| |
| Protocol.Debugger.resume(); |
| ({ params: { callFrames } } = await Protocol.Debugger.oncePaused()); // a.testInstatnce(); |
| frame = callFrames[0]; |
| |
| InspectorTest.log('get privateProperties of a in testInstance()'); |
| ({ result } = await Protocol.Runtime.getProperties({ |
| objectId: frame.this.objectId |
| })); |
| InspectorTest.logMessage(result.privateProperties); |
| |
| InspectorTest.log('Evaluating this.#instanceMethod() in testInstance()'); |
| ({ result } = await Protocol.Debugger.evaluateOnCallFrame({ |
| expression: 'this.#instanceMethod();', |
| callFrameId: callFrames[0].callFrameId |
| })); |
| InspectorTest.logMessage(result); |
| |
| Protocol.Debugger.resume(); |
| Protocol.Debugger.disable(); |
| } |
| ]); |