Index: third_party/WebKit/LayoutTests/inspector-protocol/runtime/runtime-command-line-api-can-be-overriden.js |
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/runtime/runtime-command-line-api-can-be-overriden.js b/third_party/WebKit/LayoutTests/inspector-protocol/runtime/runtime-command-line-api-can-be-overriden.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3f82c6863d4e58dba3359c9c9ed61e7bb4ad5f35 |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/inspector-protocol/runtime/runtime-command-line-api-can-be-overriden.js |
@@ -0,0 +1,63 @@ |
+(async function(testRunner) { |
+ let {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.logObject(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(); |
+}) |