| Index: test/mjsunit/debug-set-variable-value.js
|
| diff --git a/test/mjsunit/debug-set-variable-value.js b/test/mjsunit/debug-set-variable-value.js
|
| deleted file mode 100644
|
| index 6f872dfecf668b504e40c6634882d316fe2f5da7..0000000000000000000000000000000000000000
|
| --- a/test/mjsunit/debug-set-variable-value.js
|
| +++ /dev/null
|
| @@ -1,338 +0,0 @@
|
| -// Copyright 2012 the V8 project authors. All rights reserved.
|
| -// Redistribution and use in source and binary forms, with or without
|
| -// modification, are permitted provided that the following conditions are
|
| -// met:
|
| -//
|
| -// * Redistributions of source code must retain the above copyright
|
| -// notice, this list of conditions and the following disclaimer.
|
| -// * Redistributions in binary form must reproduce the above
|
| -// copyright notice, this list of conditions and the following
|
| -// disclaimer in the documentation and/or other materials provided
|
| -// with the distribution.
|
| -// * Neither the name of Google Inc. nor the names of its
|
| -// contributors may be used to endorse or promote products derived
|
| -// from this software without specific prior written permission.
|
| -//
|
| -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
| -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
| -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
| -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
| -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
| -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
| -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
| -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
| -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| -
|
| -// Flags: --expose-debug-as debug
|
| -
|
| -// Get the Debug object exposed from the debug context global object.
|
| -var Debug = debug.Debug;
|
| -var DebugCommandProcessor = debug.DebugCommandProcessor;
|
| -
|
| -// Accepts a function/closure 'fun' that must have a debugger statement inside.
|
| -// A variable 'variable_name' must be initialized before debugger statement
|
| -// and returned after the statement. The test will alter variable value when
|
| -// on debugger statement and check that returned value reflects the change.
|
| -function RunPauseTest(scope_number, expected_old_result, variable_name,
|
| - new_value, expected_new_result, fun) {
|
| - var actual_old_result = fun();
|
| - assertEquals(expected_old_result, actual_old_result);
|
| -
|
| - var listener_delegate;
|
| - var listener_called = false;
|
| - var exception = null;
|
| -
|
| - function listener_delegate(exec_state) {
|
| - var scope = exec_state.frame(0).scope(scope_number);
|
| - scope.setVariableValue(variable_name, new_value);
|
| - }
|
| -
|
| - function listener(event, exec_state, event_data, data) {
|
| - try {
|
| - if (event == Debug.DebugEvent.Break) {
|
| - listener_called = true;
|
| - listener_delegate(exec_state);
|
| - }
|
| - } catch (e) {
|
| - exception = e;
|
| - }
|
| - }
|
| -
|
| - // Add the debug event listener.
|
| - Debug.setListener(listener);
|
| -
|
| - var actual_new_result;
|
| - try {
|
| - actual_new_result = fun();
|
| - } finally {
|
| - Debug.setListener(null);
|
| - }
|
| -
|
| - if (exception != null) {
|
| - assertUnreachable("Exception in listener\n" + exception.stack);
|
| - }
|
| - assertTrue(listener_called);
|
| -
|
| - assertEquals(expected_new_result, actual_new_result);
|
| -}
|
| -
|
| -// Accepts a closure 'fun' that returns a variable from its outer scope.
|
| -// The test changes the value of variable via the handle to function and checks
|
| -// that the return value changed accordingly.
|
| -function RunClosureTest(scope_number, expected_old_result, variable_name,
|
| - new_value, expected_new_result, fun) {
|
| - var actual_old_result = fun();
|
| - assertEquals(expected_old_result, actual_old_result);
|
| -
|
| - var fun_mirror = Debug.MakeMirror(fun);
|
| -
|
| - var scope = fun_mirror.scope(scope_number);
|
| - scope.setVariableValue(variable_name, new_value);
|
| -
|
| - var actual_new_result = fun();
|
| -
|
| - assertEquals(expected_new_result, actual_new_result);
|
| -}
|
| -
|
| -
|
| -function ClosureTestCase(scope_index, old_result, variable_name, new_value,
|
| - new_result, success_expected, factory) {
|
| - this.scope_index_ = scope_index;
|
| - this.old_result_ = old_result;
|
| - this.variable_name_ = variable_name;
|
| - this.new_value_ = new_value;
|
| - this.new_result_ = new_result;
|
| - this.success_expected_ = success_expected;
|
| - this.factory_ = factory;
|
| -}
|
| -
|
| -ClosureTestCase.prototype.run_pause_test = function() {
|
| - var th = this;
|
| - var fun = this.factory_(true);
|
| - this.run_and_catch_(function() {
|
| - RunPauseTest(th.scope_index_ + 1, th.old_result_, th.variable_name_,
|
| - th.new_value_, th.new_result_, fun);
|
| - });
|
| -}
|
| -
|
| -ClosureTestCase.prototype.run_closure_test = function() {
|
| - var th = this;
|
| - var fun = this.factory_(false);
|
| - this.run_and_catch_(function() {
|
| - RunClosureTest(th.scope_index_, th.old_result_, th.variable_name_,
|
| - th.new_value_, th.new_result_, fun);
|
| - });
|
| -}
|
| -
|
| -ClosureTestCase.prototype.run_and_catch_ = function(runnable) {
|
| - if (this.success_expected_) {
|
| - runnable();
|
| - } else {
|
| - assertThrows(runnable);
|
| - }
|
| -}
|
| -
|
| -
|
| -// Test scopes visible from closures.
|
| -
|
| -var closure_test_cases = [
|
| - new ClosureTestCase(0, 'cat', 'v1', 5, 5, true,
|
| - function Factory(debug_stop) {
|
| - var v1 = 'cat';
|
| - return function() {
|
| - if (debug_stop) debugger;
|
| - return v1;
|
| - }
|
| - }),
|
| -
|
| - new ClosureTestCase(0, 4, 't', 7, 9, true, function Factory(debug_stop) {
|
| - var t = 2;
|
| - var r = eval("t");
|
| - return function() {
|
| - if (debug_stop) debugger;
|
| - return r + t;
|
| - }
|
| - }),
|
| -
|
| - new ClosureTestCase(0, 6, 't', 10, 13, true, function Factory(debug_stop) {
|
| - var t = 2;
|
| - var r = eval("t = 3");
|
| - return function() {
|
| - if (debug_stop) debugger;
|
| - return r + t;
|
| - }
|
| - }),
|
| -
|
| - new ClosureTestCase(0, 17, 's', 'Bird', 'Bird', true,
|
| - function Factory(debug_stop) {
|
| - eval("var s = 17");
|
| - return function() {
|
| - if (debug_stop) debugger;
|
| - return s;
|
| - }
|
| - }),
|
| -
|
| - new ClosureTestCase(2, 'capybara', 'foo', 77, 77, true,
|
| - function Factory(debug_stop) {
|
| - var foo = "capybara";
|
| - return (function() {
|
| - var bar = "fish";
|
| - try {
|
| - throw {name: "test exception"};
|
| - } catch (e) {
|
| - return function() {
|
| - if (debug_stop) debugger;
|
| - bar = "beast";
|
| - return foo;
|
| - }
|
| - }
|
| - })();
|
| - }),
|
| -
|
| - new ClosureTestCase(0, 'AlphaBeta', 'eee', 5, '5Beta', true,
|
| - function Factory(debug_stop) {
|
| - var foo = "Beta";
|
| - return (function() {
|
| - var bar = "fish";
|
| - try {
|
| - throw "Alpha";
|
| - } catch (eee) {
|
| - return function() {
|
| - if (debug_stop) debugger;
|
| - return eee + foo;
|
| - }
|
| - }
|
| - })();
|
| - })
|
| -];
|
| -
|
| -for (var i = 0; i < closure_test_cases.length; i++) {
|
| - closure_test_cases[i].run_pause_test();
|
| -}
|
| -
|
| -for (var i = 0; i < closure_test_cases.length; i++) {
|
| - closure_test_cases[i].run_closure_test();
|
| -}
|
| -
|
| -
|
| -// Test local scope.
|
| -
|
| -RunPauseTest(0, 'HelloYou', 'u', 'We', 'HelloWe', (function Factory() {
|
| - return function() {
|
| - var u = "You";
|
| - var v = "Hello";
|
| - debugger;
|
| - return v + u;
|
| - }
|
| -})());
|
| -
|
| -RunPauseTest(0, 'Helloworld', 'p', 'GoodBye', 'HelloGoodBye',
|
| - (function Factory() {
|
| - function H(p) {
|
| - var v = "Hello";
|
| - debugger;
|
| - return v + p;
|
| - }
|
| - return function() {
|
| - return H("world");
|
| - }
|
| -})());
|
| -
|
| -RunPauseTest(0, 'mouse', 'v1', 'dog', 'dog', (function Factory() {
|
| - return function() {
|
| - var v1 = 'cat';
|
| - eval("v1 = 'mouse'");
|
| - debugger;
|
| - return v1;
|
| - }
|
| -})());
|
| -
|
| -RunPauseTest(0, 'mouse', 'v1', 'dog', 'dog', (function Factory() {
|
| - return function() {
|
| - eval("var v1 = 'mouse'");
|
| - debugger;
|
| - return v1;
|
| - }
|
| -})());
|
| -
|
| -
|
| -// Check that we correctly update local variable that
|
| -// is referenced from an inner closure.
|
| -RunPauseTest(0, 'Blue', 'v', 'Green', 'Green', (function Factory() {
|
| - return function() {
|
| - function A() {
|
| - var v = "Blue";
|
| - function Inner() {
|
| - return void v;
|
| - }
|
| - debugger;
|
| - return v;
|
| - }
|
| - return A();
|
| - }
|
| -})());
|
| -
|
| -// Check that we correctly update parameter, that is known to be stored
|
| -// both on stack and in heap.
|
| -RunPauseTest(0, 5, 'p', 2012, 2012, (function Factory() {
|
| - return function() {
|
| - function A(p) {
|
| - function Inner() {
|
| - return void p;
|
| - }
|
| - debugger;
|
| - return p;
|
| - }
|
| - return A(5);
|
| - }
|
| -})());
|
| -
|
| -
|
| -// Test value description protocol JSON
|
| -
|
| -assertEquals(true, DebugCommandProcessor.resolveValue_({value: true}));
|
| -
|
| -assertSame(null, DebugCommandProcessor.resolveValue_({type: "null"}));
|
| -assertSame(undefined,
|
| - DebugCommandProcessor.resolveValue_({type: "undefined"}));
|
| -
|
| -assertSame("123", DebugCommandProcessor.resolveValue_(
|
| - {type: "string", stringDescription: "123"}));
|
| -assertSame(123, DebugCommandProcessor.resolveValue_(
|
| - {type: "number", stringDescription: "123"}));
|
| -
|
| -assertSame(Number, DebugCommandProcessor.resolveValue_(
|
| - {handle: Debug.MakeMirror(Number).handle()}));
|
| -assertSame(RunClosureTest, DebugCommandProcessor.resolveValue_(
|
| - {handle: Debug.MakeMirror(RunClosureTest).handle()}));
|
| -
|
| -
|
| -// Test script-scope variable.
|
| -let abc = 12;
|
| -{
|
| - let exception;
|
| - function listener(event, exec_state) {
|
| - try {
|
| - if (event == Debug.DebugEvent.Break) {
|
| - let scope_count = exec_state.frame().scopeCount();
|
| - let script_scope = exec_state.frame().scope(scope_count - 2);
|
| - assertTrue(script_scope.isScope());
|
| - assertEquals(debug.ScopeType.Script, script_scope.scopeType());
|
| - script_scope.setVariableValue('abc', 42);
|
| - }
|
| - } catch(e) { exception = e }
|
| - }
|
| -
|
| - Debug.setListener(listener);
|
| - assertEquals(12, abc);
|
| - debugger;
|
| - assertEquals(42, abc);
|
| -
|
| - if (exception != null) {
|
| - assertUnreachable("Exception in listener\n" + exception.stack);
|
| - }
|
| -}
|
| -
|
| -Debug.setListener(null);
|
|
|