diff options
Diffstat (limited to 'deps/v8/test/inspector/runtime/clear-of-command-line-api.js')
-rw-r--r-- | deps/v8/test/inspector/runtime/clear-of-command-line-api.js | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/deps/v8/test/inspector/runtime/clear-of-command-line-api.js b/deps/v8/test/inspector/runtime/clear-of-command-line-api.js new file mode 100644 index 0000000000..2af2f4917f --- /dev/null +++ b/deps/v8/test/inspector/runtime/clear-of-command-line-api.js @@ -0,0 +1,117 @@ +// Copyright 2016 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. + +print("Tests that CommandLineAPI is presented only while evaluation."); + +InspectorTest.addScript( +` +var methods = ["dir","dirxml","profile","profileEnd","clear","table","keys","values","debug","undebug","monitor","unmonitor","inspect","copy"]; +var window = this; +function presentedAPIMethods() +{ + var methodCount = 0; + for (var method of methods) { + try { + if (eval("window." + method + "&&" + method + ".toString ? " + method + ".toString().indexOf(\\"[Command Line API]\\") !== -1 : false")) + ++methodCount; + } catch (e) { + } + } + methodCount += eval("\\"$_\\" in window ? $_ === 239 : false") ? 1 : 0; + return methodCount; +} + +function setPropertyForMethod() +{ + window.dir = 42; +} + +function defineValuePropertyForMethod() +{ + Object.defineProperty(window, "dir", { value: 42 }); +} + +function defineAccessorPropertyForMethod() +{ + Object.defineProperty(window, "dir", { set: function() {}, get: function(){ return 42 } }); +} + +function definePropertiesForMethod() +{ + Object.defineProperties(window, { "dir": { set: function() {}, get: function(){ return 42 } }}); +} + +var builtinGetOwnPropertyDescriptorOnObject; +var builtinGetOwnPropertyDescriptorOnObjectPrototype; +var builtinGetOwnPropertyDescriptorOnWindow; + +function redefineGetOwnPropertyDescriptors() +{ + builtinGetOwnPropertyDescriptorOnObject = Object.getOwnPropertyDescriptor; + Object.getOwnPropertyDescriptor = function() {} + builtinGetOwnPropertyDescriptorOnObjectPrototype = Object.prototype.getOwnPropertyDescriptor; + Object.prototype.getOwnPropertyDescriptor = function() {} + builtinGetOwnPropertyDescriptorOnWindow = window.getOwnPropertyDescriptor; + window.getOwnPropertyDescriptor = function() {} +} + +function restoreGetOwnPropertyDescriptors() +{ + Object.getOwnPropertyDescriptor = builtinGetOwnPropertyDescriptorOnObject; + Object.prototype.getOwnPropertyDescriptor = builtinGetOwnPropertyDescriptorOnObjectPrototype; + window.getOwnPropertyDescriptor = builtinGetOwnPropertyDescriptorOnWindow; +}`); + +runExpressionAndDumpPresentedMethods("") + .then(dumpLeftMethods) + .then(() => runExpressionAndDumpPresentedMethods("setPropertyForMethod()")) + .then(dumpLeftMethods) + .then(dumpDir) + .then(() => runExpressionAndDumpPresentedMethods("defineValuePropertyForMethod()")) + .then(dumpLeftMethods) + .then(dumpDir) + .then(() => runExpressionAndDumpPresentedMethods("definePropertiesForMethod()")) + .then(dumpLeftMethods) + .then(dumpDir) + .then(() => runExpressionAndDumpPresentedMethods("defineAccessorPropertyForMethod()")) + .then(dumpLeftMethods) + .then(dumpDir) + .then(() => runExpressionAndDumpPresentedMethods("redefineGetOwnPropertyDescriptors()")) + .then(dumpLeftMethods) + .then(dumpDir) + .then(() => evaluate("restoreGetOwnPropertyDescriptors()", false)) + .then(InspectorTest.completeTest); + +function evaluate(expression, includeCommandLineAPI) +{ + return Protocol.Runtime.evaluate({ expression: expression, objectGroup: "console", includeCommandLineAPI: includeCommandLineAPI }); +} + +function setLastEvaluationResultTo239() +{ + return evaluate("239", false); +} + +function runExpressionAndDumpPresentedMethods(expression) +{ + InspectorTest.log(expression); + return setLastEvaluationResultTo239() + .then(() => evaluate(expression + "; var a = presentedAPIMethods(); a", true)) + .then((result) => InspectorTest.logMessage(result)); +} + +function dumpLeftMethods() +{ + // Should always be zero. + return setLastEvaluationResultTo239() + .then(() => evaluate("presentedAPIMethods()", false)) + .then((result) => InspectorTest.logMessage(result)); +} + +function dumpDir() +{ + // Should always be presented. + return evaluate("dir", false) + .then((result) => InspectorTest.logMessage(result)); +} |