| // Copyright 2019 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 {Protocol} = InspectorTest.start( |
| 'Tests that Runtime.evaluate with REPL mode correctly detects side-effects.'); |
| |
| Protocol.Runtime.enable(); |
| (async function() { |
| InspectorTest.log('Test "let" declaration is side-effecting'); |
| await evaluateRepl('let x = 21;'); |
| |
| InspectorTest.log('Test "const" declaration is side-effecting'); |
| await evaluateRepl('const y = 42;'); |
| |
| InspectorTest.log('Test "const" with side-effects works afterwards'); |
| await evaluateReplWithSideEffects('const y = 42;'); |
| |
| InspectorTest.log('Test side-effect free expressions can be eagerly evaluated'); |
| await evaluateRepl('1 + 2'); |
| await evaluateRepl('"hello " + "REPL"'); |
| |
| await evaluateRepl('(async function foo() { return 42; })();'); |
| |
| InspectorTest.completeTest(); |
| })(); |
| |
| async function evaluateRepl(expression) { |
| InspectorTest.logMessage(await Protocol.Runtime.evaluate({ |
| expression: expression, |
| replMode: true, |
| throwOnSideEffect: true |
| })); |
| } |
| |
| async function evaluateReplWithSideEffects(expression) { |
| InspectorTest.logMessage(await Protocol.Runtime.evaluate({ |
| expression: expression, |
| replMode: true, |
| throwOnSideEffect: false |
| })); |
| } |