| (async function(testRunner) { |
| var {page, session, dp} = await testRunner.startBlank(`Tests that Command Line API doesn't override defined on window methods and can be overridden during evaluation.`); |
| |
| await session.evaluate(` |
| function overrideDir() { |
| var v = '' + dir; |
| dir = 239; |
| return v + ' -> ' + dir; |
| } |
| |
| function override$_() { |
| var v = '' + $_; |
| $_ = 239; |
| return v + ' -> ' + $_; |
| } |
| |
| function doesCommandLineAPIEnumerable() { |
| for (var v in window) { |
| if (v === 'dir' || v === '$_') |
| return 'enumerable'; |
| } |
| return 'non enumerable'; |
| } |
| `); |
| |
| async function evaluate(expression) { |
| var result = await dp.Runtime.evaluate({ 'expression': expression, objectGroup: 'console', includeCommandLineAPI: true }); |
| return result.result; |
| } |
| |
| function dumpResult(title, message) { |
| testRunner.log(title); |
| testRunner.log(message.result.value); |
| } |
| |
| dumpResult(`Check that CommandLineAPI isn't enumerable on window object:`, |
| await evaluate(`doesCommandLineAPIEnumerable()`)); |
| dumpResult(`Override dir:`, |
| await evaluate(`overrideDir()`)); |
| dumpResult(`CommandLineAPI doesn't override dir:`, |
| await evaluate(`'' + dir`)); |
| await evaluate(`delete dir`); |
| dumpResult(`CommandLineAPI is presented after removing override variable:`, |
| await evaluate(`overrideDir()`)); |
| // set $_ to 42 |
| await evaluate(`42`); |
| dumpResult(`Override $_:`, |
| await evaluate(`override$_()`)); |
| dumpResult(`CommandLineAPI doesn't override $_:`, |
| await evaluate(`'' + $_`)); |
| await evaluate(`delete $_`); |
| dumpResult(`CommandLineAPI is presented after removing override variable:`, |
| await evaluate(`override$_()`)); |
| dumpResult(`CommandLineAPI can be overridden by var dir = 1:`, |
| await evaluate(`var dir = 1; '' + dir`)); |
| dumpResult(`CommandLineAPI doesn't override var dir = 1:`, |
| await evaluate(`'' + dir`)); |
| dumpResult(`CommandLineAPI can be overridden by Object.defineProperty:`, |
| await evaluate(`Object.defineProperty(window, 'copy', { get: () => 239 }); '' + copy`)); |
| dumpResult(`CommandLineAPI doesn't override Object.defineProperty:`, |
| await evaluate(`'' + copy`)); |
| testRunner.completeTest(); |
| }) |