// Copyright 2017 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. let {session, contextGroup, Protocol} = InspectorTest.start('Checks this in arrow function scope'); (async function test() { session.setupScriptMap(); Protocol.Debugger.enable(); Protocol.Runtime.evaluate({expression: ` function foo() { return () => { let a = this; (function() { let f = () => { debugger; }; f(); }).call('a'); return a; }; } function boo() { foo.call(1)(); } (() => boo.call({}))();` }); let {params:{callFrames}} = await Protocol.Debugger.oncePaused(); for (let callFrame of callFrames) { await session.logSourceLocation(callFrame.location); InspectorTest.log('This on callFrame:'); InspectorTest.logMessage(callFrame.this); let {result:{result}} = await Protocol.Debugger.evaluateOnCallFrame({ callFrameId: callFrame.callFrameId, expression: 'this' }); InspectorTest.log('This in evaluateOnCallFrame:'); InspectorTest.logMessage(result); if (callFrame.this.type === 'undefined' || result.type === 'undefined') { InspectorTest.log('Values equal: ' + (callFrame.this.type === result.type) + '\n'); continue; } let {result:{result:{value}}} = await Protocol.Runtime.callFunctionOn({ functionDeclaration: 'function equal(a) { return this === a; }', objectId: callFrame.this.objectId, arguments: [ result.value ? {value: result.value} : {objectId: result.objectId}], returnByValue: true }); InspectorTest.log('Values equal: ' + value + '\n'); } InspectorTest.completeTest(); })();