| Index: test/inspector/runtime/clear-of-command-line-api.js
|
| diff --git a/test/inspector/runtime/clear-of-command-line-api.js b/test/inspector/runtime/clear-of-command-line-api.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..776144c4f0ba3579d6b3bb9efd93cfb2c336a8a5
|
| --- /dev/null
|
| +++ b/test/inspector/runtime/clear-of-command-line-api.js
|
| @@ -0,0 +1,120 @@
|
| +// 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.evaluateInPage(
|
| +`
|
| +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)
|
| +{
|
| + var cb;
|
| + var p = new Promise(resolver => cb = resolver);
|
| + InspectorTest.sendCommandOrDie("Runtime.evaluate", { expression: expression, objectGroup: "console", includeCommandLineAPI: includeCommandLineAPI }, cb);
|
| + return p;
|
| +}
|
| +
|
| +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.logObject(result));
|
| +}
|
| +
|
| +function dumpLeftMethods()
|
| +{
|
| + // Should always be zero.
|
| + return setLastEvaluationResultTo239()
|
| + .then(() => evaluate("presentedAPIMethods()", false))
|
| + .then((result) => InspectorTest.logObject(result));
|
| +}
|
| +
|
| +function dumpDir()
|
| +{
|
| + // Should always be presented.
|
| + return evaluate("dir", false)
|
| + .then((result) => InspectorTest.logObject(result));
|
| +}
|
|
|