Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(299)

Unified Diff: test/mjsunit/debug-set-variable-value.js

Issue 11412310: Issue 2399 part 2: In debugger allow modifying local variable values (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: follow code review Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/runtime.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
index dac88614569ac3d1ccf7aa84d1abc4655c65a547..7b6a98b18165fd567b2a3661a0669472c7003c57 100644
--- a/test/mjsunit/debug-set-variable-value.js
+++ b/test/mjsunit/debug-set-variable-value.js
@@ -34,8 +34,10 @@ var Debug = debug.Debug;
// 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, variable_name, expected_new_value, fun) {
- var old_value = fun();
+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;
@@ -43,7 +45,7 @@ function RunPauseTest(scope_number, variable_name, expected_new_value, fun) {
function listener_delegate(exec_state) {
var scope = exec_state.frame(0).scope(scope_number);
- scope.setVariableValue(variable_name, expected_new_value);
+ scope.setVariableValue(variable_name, new_value);
}
function listener(event, exec_state, event_data, data) {
@@ -62,102 +64,201 @@ function RunPauseTest(scope_number, variable_name, expected_new_value, fun) {
var actual_new_value;
try {
- actual_new_value = fun();
+ actual_new_result = fun();
} finally {
Debug.setListener(null);
}
if (exception != null) {
- assertUnreachable("Exception: " + exception);
+ assertUnreachable("Exception in listener\n" + exception.stack);
}
assertTrue(listener_called);
- assertTrue(old_value != actual_new_value);
- assertTrue(expected_new_value == actual_new_value);
+ assertEquals(expected_new_result, actual_new_result);
}
// Accepts a closure 'fun' that returns a variable from it's 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, variable_name, expected_new_value, fun) {
- var old_value = fun();
+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, expected_new_value);
+ scope.setVariableValue(variable_name, new_value);
- var actual_new_value = fun();
+ var actual_new_result = fun();
- assertTrue(old_value != actual_new_value);
- assertTrue(expected_new_value == actual_new_value);
+ assertEquals(expected_new_result, actual_new_result);
}
-// Test changing variable value when in pause
-RunPauseTest(1, 'v1', 5, (function Factory() {
- var v1 = 'cat';
+
+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 v1;
+ return v + u;
}
})());
-RunPauseTest(1, 'v2', 11, (function Factory(v2) {
- return function() {
+RunPauseTest(0, 'Helloworld', 'p', 'GoodBye', 'HelloGoodBye',
+ (function Factory() {
+ function H(p) {
+ var v = "Hello";
debugger;
- return v2;
+ return v + p;
+ }
+ return function() {
+ return H("world");
}
-})('dog'));
-
-RunPauseTest(3, 'foo', 77, (function Factory() {
- var foo = "capybara";
- return (function() {
- var bar = "fish";
- try {
- throw {name: "test exception"};
- } catch (e) {
- return function() {
- debugger;
- bar = "beast";
- return foo;
- }
- }
- })();
})());
-
-
-// Test changing variable value in closure by handle
-RunClosureTest(0, 'v1', 5, (function Factory() {
- var v1 = 'cat';
+RunPauseTest(0, 'mouse', 'v1', 'dog', 'dog', (function Factory() {
return function() {
+ var v1 = 'cat';
+ eval("v1 = 'mouse'");
+ debugger;
return v1;
}
})());
-RunClosureTest(0, 'v2', 11, (function Factory(v2) {
+RunPauseTest(0, 'mouse', 'v1', 'dog', 'dog', (function Factory() {
return function() {
- return v2;
+ eval("var v1 = 'mouse'");
+ debugger;
+ return v1;
}
-})('dog'));
-
-RunClosureTest(2, 'foo', 77, (function Factory() {
- var foo = "capybara";
- return (function() {
- var bar = "fish";
- try {
- throw {name: "test exception"};
- } catch (e) {
- return function() {
- bar = "beast";
- return foo;
- }
- }
- })();
})());
// Test value description protocol JSON
+
assertEquals(true, Debug.TestApi.CommandProcessorResolveValue({value: true}));
assertSame(null, Debug.TestApi.CommandProcessorResolveValue({type: "null"}));
@@ -173,4 +274,3 @@ assertSame(Number, Debug.TestApi.CommandProcessorResolveValue(
{handle: Debug.MakeMirror(Number).handle()}));
assertSame(RunClosureTest, Debug.TestApi.CommandProcessorResolveValue(
{handle: Debug.MakeMirror(RunClosureTest).handle()}));
-
« no previous file with comments | « src/runtime.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698